内容要点:
一.
JS数组是无类型的:数组元素可以是任意对象,并且同一个数组中的不同元素也可能有不同的类型。数组的元素甚至也可能是对象或其他属性,这允许创建复制的数据结构,如对象的数组和数组的数组。
JS数组是动态的:根据需要它们会增长或缩减,并且在创建数组时无须声明一个固定的大小或者在数组大小变化时无须重新分配空间。
JS数组可能是稀疏的:数组元素的索引不一定要连续的,它们之间可以有空隙。每个JS数组都有一个length属性。针对非稀疏数组,该属性就是数组元素的个数。针对稀疏数组,length比所有元素的索引要大。
二.一些知识点
1.var undefs = [,,]; //数组有2个元素,都是undefined
数组直接量的语法允许有可选的结尾的逗号,故[,,]只有两个元素而非三个
2.调用构造函数Array()是创建数组的另一种写法。可以用三种方法调用构造函数
var a = new Array(); //该方法创建一个没有任何元素的空数组,等同于数组直接量[]
var a = new Array(10); //调用时有一个数组参数,它指定长度
var a = new Array(5,4,3,2,1,"testing","testing"); //显式指定两个或多个数组元素或者数组的一个非数值元素,构造函数的参数将会成为新数组的元素。
3.数组是对象的特殊形式,
所有的数组都是对象,可以为其创建任意名字的属性。但如果使用的属性是数组的索引,数组的特殊行为就是将根据需要更新它们的length属性。
注意:可以使用负数或非整数来索引数组
a[-1.23] = true; //创建一个名为 "-1.23" 的属性
a["1.000"] = 0; //这是数组的第1001个新元素
a[1.000] //和a[1]相等
4.稀疏数组:稀疏数组就是从0开始的不连续索引的数组。通常,数组的length属性值代表数组中元素的个数。如果数组是稀疏的,length属性值大于元素的个数。
注意,当在数组直接量中省略值时不会创建稀疏数组。省略的元素在数组中是存在的,其值是undefined。
5.数组长度:
第二个特殊的行为就是设置length属性为一个小于当前长度的非负整数n时,当前数组中那些索引值大于或等于n的元素将从中删除:
a = [1,2,3,4,5];
a.length=3; //现在a为[1,2,3]
a.length=0; //删除所有的元素。a为[]
a.length=5; //长度为5,但是没有元素,就像new Array(5)
还可以将数组的length属性值设置为大于其当前的长度。实际上这个不会向数组中添加新的元素,它只是在数组尾部创建一个空的区域