垃圾收集原理:

找出不再使用的变量,然后释放其内存。

js中最常用的垃圾收集方法是标记清除,当变量进入环境时,就将变量标记为“进入环境”,当变量离开环境时,将其标记为“离开环境”,最后由垃圾收集器完成内存清除工作。

另一种不太常见的垃圾收集原理是引用计数,它跟踪每个值被引用的次数,当引用次数为0时,垃圾收集器会释放其内存,但是有可能造成循环引用的问题,这种情况下可以手动把引用设置为null

通常Web浏览器的可用内存比分配给桌面应用程序的少,因此要确保占用最少的内存可以让页面获得更好地性能,所以代码中只保存必要的数据,一旦数据不再有用,最好手动将其值设置为null,来释放其引用——这个做法叫做解除引用

引用类型:

定义:引用类型的值(对象)是引用类型的一个实例。

创建Object实例的方式:

1.new操作符后跟object构造函数。

2.使用对象字面量表示法。

 var person = {
name : "Annika",
age : 29
}

注意:用逗号来分隔不同的属性,最后一个属性不添加逗号。属性名也可以用字符串。在多个可选参数的情况下,对必须值使用命名参数,而使用对象字面量来封装多个可选参数。

使用方式:一般来说都是点表示法,也可以方括号表示法,把访问的属性以字符串写在方括号中。

方括号的主要优点是可以通过变量来访问属性:

 var propertyName = "name";
alert(person[propertyName]); //"Annika"

如果属性名中包含会导致语法错误的字符,或者属性名用的是关键字或保留字,也可以使用方括号表示法:

person["first name"]="Annika";    //属性名中可以包含非字母非数字

Array类型:

ECMAScript与其他语言的不同之处在于它可以保存任何类型的数据。

创建数组的方法:

1.Array构造函数

 var colors = new Array(3);    //创建一个包含3项的数组
var names = new Array("Annika"); //创建一个一项的,即字符串“Annika”的数组

2.数组字面量表示法

 var colors = ["red","blue"];

数组的length属性的特别之处——可以通过设置这个属性,从数组末尾移除项或者添加新项。

检测某个对象是不是数组的方法:Array.isArray();

转换方法:(默认情况下以逗号分隔,用join()方法,可以接受一个分隔符作为参数)

  • toLocaleString(),
  • toString(),返回数组中每个值得字符串形式
  • valueOf(),返回数组本身

栈方法:

栈是一种LIFO(Last-in-first-out)后进先出的数据结构,栈中项的插入和移除都发生在栈顶部。ECMAScript中为数组提供了两种方法:

push():传入任意参数,逐个添加到数组末尾,并返回修改后的数组长度。

pop():从数组末尾移除最后一项,减少length数,并返回移除的项。

队列方法:

队列是一种FIFI(First-in-first-out)先进先出的数据结构,队列在末尾添加项,在列表的前端移除项,有两种新方法:

shift():移除数组的第一项,并返回该项。

unshift():从数组前端推进任意项,并返回数组长度。

重排序方法:

reverse():反转数组顺序。

sort():默认按升序排列数组项,会调用每个数组的toString()方法,比较得到字符串,所以可以得到意料之外的答案。

 var values = [0, 1, 5, 10, 15];
values.sort();
alert(values); //0,1,10,15,5

所以最好给sort添加一个参数:

 function compare(value1,value2){
if (value1<value2){
return -1;
} else if (value1 < value2){
return 1;
} else {
return 0;
}
}
 values.sort(compare);
alert(values); //0,1,5,10,15

操作方法:

cancat():创建当前数组一个副本,将接收到的参数添加到副本末尾,返回新构建的数组

slice():不改变原来的数组,可以接受一到两个参数,只有一个参数就返回从该参数到末尾的所有项,如果是两个,就返回起始和结束位置之间的项,如果参数为负数,就加上数组长度再调用,如果结束位置小于起始位置,则返回空数组。

splice():会改变原来的数组,始终返回被删除的项。

  • 删除:只需指定两个参数,要删除的第一项和要删除的项数。
  • 插入:只需提供3个参数,起始位置,0(要删除的项数)和要插入的项,可以插入多项。
  • 替换:指定的参数与插入相同,只不过0可以改成要删除的项数。

位置方法:

共有两个位置方法:

indexOf():从数组开头

lastIndexOf():从数组末尾

都接受两个参数,要查找的项和要查找的起点位置索引(可选),没找到就返回-1,在比较过程中使用全等操作符。

迭代方法:

共有5个迭代方法,每个方法接受两个参数:要在每一项上运行的函数和运行该函数的作用域对象——影响this的值,其中传入函数的参数有三个,数组项的值、该项在数组中的位置和数组对象本身。

every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。

 var numbers = [1,2,3,4,5,4,3,2,1]

 var everyResult = numbers.every(function(item,index,array){
return (item>2);
}); alert(everyResult); //false

filter():对数组中的每一项运行给定函数,返回该函数会返回true。

 var everyResult = numbers.filter(function(item,index,array){
return (item>2);
}); alert(everyResult); //[3,4,5,4,3]

forEach():对数组每一项运行指定函数,该方法没有返回值。

 numbers.forEach(function(item,index,array){
alert(item*2);
}); //2,4,6,8,10,8,6,4,2

map():对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组。

 var mapResult = numbers.map(function(item,index,array){
return item*2;
});
alert(mapResult); //[ 2, 4, 6, 8, 10, 8, 6, 4, 2 ]

some():对数组中的每一项运行指定的函数,如果该函数对任一项返回true,则返回true。

 var someResult = numbers.some(function(item,index,array){
return (item>2);
});
console.log(someResult); //true

归并方法

ECMAScript新增了两个归并数组的方法,这两个方法会迭代数组的所有项,然后构建一个最终的返回值。

reduce():从数组的第一项开始,逐个遍历到最后,接受两个参数,一个在每一项上调用的函数和作为归并基础的初始值,其中函数接受4个参数,前一个值,当前值,项的索引和数组对象。这个函数的任何返回值都会作为第一个参数自动传给下一项。

 var numbers = [1,2,3,4,5,4,3,2,1]

 var Result = numbers.reduce(function(prev,cur,index,array){
return prev+cur;
});
console.log(Result); //

reduceRight():与reduce相同,只是遍历开始的方向不同。

JavaScript高级程序设计学习笔记2的更多相关文章

  1. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

  2. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

  3. javascript 高级程序设计 学习笔记

    <!--<script> // 异步请求封装 IE6即以上浏览器 // ajax(url,fnSucc,selectID,fnFaild) //url 请求地址 //fnSucc 异 ...

  4. JavaScript高级程序设计---学习笔记(二)

    面向对象程序设计1.属性类型.定义多属性.读取属性特性对象的属性在创建时都带有一些特征值,JavaScript通过这些特征值来定义它们的行为.这些特性是为了实现JavaScript引擎用的,因此不能直 ...

  5. JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承

    相关文章: 面向对象的程序设计(一) — 创建对象 http://www.cnblogs.com/blackwood/archive/2013/04/24/3039523.html 继承 继承是OO语 ...

  6. JavaScript高级程序设计学习笔记第一章

    作为学习javascript的小白,为了督促自己读书,写下自己在读书时的提炼的关键点. 第一章: 1.JavaScript简史:Netscape Navigator中的JavaScript与Inter ...

  7. JavaScript高级程序设计学习笔记之事件

    1.事件流 事件流描述的是从页面中接收事件的顺序. 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播 ...

  8. 事件流之事件冒泡与事件捕获<JavaScript高级程序设计>学习笔记

    1.事件流 浏览器开发团队遇到一个很有意思问题:页面的那一部分会拥有特定的事件? 对于理解这个问题您可以想象画在一张纸上的一组同心圆,如果你把手指放在圆心上,那么你的手指指向的其实不是一个圆,而是纸上 ...

  9. JavaScript高级程序设计学习笔记--高级技巧

    惰性载入函数 因为浏览器之间行为的差异,多数JavaScript代码包含了大量的if语句,将执行引导到正确的代码中,看看下面来自上一章的createXHR()函数. function createXH ...

  10. JavaScript高级程序设计学习笔记--错误处理与调试

    try-catch语句 只要代码中包含finally子句,则无论try或catch语句块中包含什么代码--甚至return语句,都不会阻止finally子句的执行,来看下面这个函数: function ...

随机推荐

  1. Asp.net core 2.0.1 Razor 的使用学习笔记(六)

    Asp.net core 2.0.1 Razor 的使用学习笔记——基本页面的建立 VS这版(vs版本:15.5.6  .net版本:4.7.02558)的Razor页面自动生成就是坑爹货,它自动生成 ...

  2. JAVA反射机制_获取字节码文件对象

    是在运行状态中,对于任意一个类 (class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...

  3. Https 安全传输的原理

    序言 今天来聊一聊https 安全传输的原理. 在开始之前,我们来虚构两个人物, 一个是位于中国的张大胖(怎么又是你?!), 还有一个是位于米国的Bill (怎么还是你?!). 这俩哥们隔着千山万水, ...

  4. C#中XmlSerializer实现序列化浅析

    C# XmlSerializer类是实现序列化的一个类,那么关于C# XmlSerializer的学习我们要掌握怎么样的操作方法呢?那么这里向你详细介绍具体的操作细节情况. C# XmlSeriali ...

  5. css心跳动画

    1.图片无限放大缩小,类似心跳 css如下 @keyframes scaleDraw { /*定义关键帧.scaleDrew关键帧名称*/ 0%{ transform: scale(1); /*开始为 ...

  6. odoo 之报date<form string=''product lc''> 错误

    原因是: </page> </notebook> </form> <div class="oe_chatter"> <fiel ...

  7. 【spring】spirng中的常用工具类

    一.概述 很多时候,很多工具类其实spring中就已经提供,常用的工具类有: 参考:https://www.cnblogs.com/langtianya/p/3875103.html 内置的resou ...

  8. Android APK 签名比对(转)

    Android apk签名的过程 1. 生成MANIFEST.MF文件: 程序遍历update.apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个生成SHA1的数字签名信息,再用Ba ...

  9. 20155331 《网络对抗》 Exp6 信息搜集与漏洞扫描

    20155331 <网络对抗> Exp6 信息搜集与漏洞扫描 实验问题回答 哪些组织负责DNS,IP的管理 答:美国政府授权ICANN统一管理全球根服务器,负责全球的域名根服务器.DNS和 ...

  10. Jmeter 安装后无法启动问题

    问题:按照教程java环境安装完成,也下载了 Jmeter  安装包,但是在启动的时候 dos窗口就一直提示下面的错误信息 ‘findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件.  ...