第九章 9.1 数组和数组元素(Arrays and Array Elements)
Array 的元素可以是任何类型,各个元素的类型也可以互不相同。甚至可以是数组类型,这样就可以创建数组的数组。
9.1.1 数组的创建方法:








还可以通过数组字面值(array literals) 的形式创建数组:





访问或者设定数组的元素可以简单的用 数组名[索引] 语法。索引必须是正整数(232 - 1) 。如果用其他的类型,诸如 boolean, float 之类的,则 JavaScript 会把该值自动转换为 string. 然后用关联数组的语法来访问。所以下面的代码:

实际上是设定了一个 name 为 "-1.23" 的属性而已。
9.1.2 读写数组元素
通过类似 a[3] 的语法即可读写,没什么可说的。
9.1.3 添加元素
JavaScript 的数组是可变大小的。可以随时用下列语法给某个元素赋值:

Array 可以是稀疏的(sparse). 也就是说不一定要连续的指定值。JavaScript 解释器会自动的只给指定了值的那些元素分配内存。例如:


只会分配两个变量的内存给这个数组。
数组元素也可以指定给对象:


这段代码也仅仅是添加了一个叫做 "0" 的属性。而这个 Object 并不会变为 Array. 只有通过 Array constructor 创建的,或者 array literal 才可以使用 Array 的一些特殊功能。
9.1.4 数组的长度
数组有 length 属性。这个值为数组中最大的索引 + 1. 例子:






length 属性最大的用处就是用于循环访问数组:



上面的例子假定了所有的元素都是连续的。如果不是这样,我们可以在访问元素前先测试它是否已经定义:


length 属性是可以读写的。如果你设定为一个比当前元素索引小的,则后面的元素会自动被丢弃。反之,设定的很大的话,则会自动在后面填充 undefined 元素。
设定 length 为一个较小的值,是唯一缩短一个数组的方法。如果你用 delete 操作符,则只能把某个元素设定为 undefined. 而 length 不会变化。
9.1.5 多维数组(Multidimentional Arrays)
JavaScript 不支持多维数组。但你可以很好的通过数组的数组(arrays of arrays) 来做到类似的效果。比如:
