js-权威指南学习笔记7
第七章 数组
1、数组直接量的语法允许有可选的结尾的逗号,所以[ , , ]只有两个元素而非三个。
2、调用构造函数Array()创建数组时,传入一个参数时表示指定数组的长度。
3、所有的索引都是属性名,但只有在0~2^32-2之间的整数属性名才是索引。所有的数组都是对象,可以为其创建任意名字的属性。但如果使用的属性是数组的索引,数组的特殊行为就是将根据需要更新它们的length属性值。
4、名字不是非负整数时,只能当作常规的对象属性,而非数组的索引。
5、稀疏数组就是包含从0开始的不连续索引的数组。可以用Array()构造函数或简单地指定数组的索引值大于当前的数组长度来创建稀疏数组。
6、当省略数组直接量中的值时,这时所得到的数组也是稀疏数组,省略掉的值是不存在的。
7、设置length属性为一个小于当前长度的非负整数n时,当前数组中那些索引大于或等于n的元素将从中删除。
8、delete操作并不影响数组长度,如果从数组中删除一个元素,它就变成稀疏数组。
9、循环中数组的长度应该只查询一次而非每次循环都要查询。
10、slice()方法中如果参数出现负数,它表示相对于数组中最后一个元素的位置。slice()不会修改调用的数组。
11、splice()会修改调用的数组。
12、当使用多个参数调用unshift()时它的参数是一次性插入的,而非一个个地插入。这意味着最终数组中插入的元素的顺序和它们在参数列表中的顺序一致。
13、传递给map()的函数的调用方式和传递给forEach()的函数的调用方式一样。但传递给map()的函数应该有返回值。它返回的是新数组,不修改调用的数组。
14、filter()会跳过稀疏数组中缺少的元素,它的返回数组总是稠密的。将稀疏数组变为稠密数组:var dense=sparse.filter(function(){return true;});
15、every()方法:当且仅当数组中的所有元素调用判定函数都返回true时,它才返回true。some()方法:当数组中至少有一个元素调用判定函数返回true,它就返回true。
16、根据数学上的惯例,在空数组上调用时,every()返回true,some()返回false。
17、判定一个对象是否是数组:使用Array.isArray()函数或者对象的toString()方法。
18、把拥有一个数值length属性和对应非负整数属性的对象看作一种类型的数组,叫做类数组对象。比如arguments对象和一些DOM方法返回的对象。
19、通过Array.prototype.slice.call(a,0)将类数组对象a转换为真正的数组。
20、字符串是不可变值,故当把他们作为数组看待时,它们是只读的,如push()/sort()/reverse()/splice()等数组方法会修改数组,他们在字符串上是无效的。