第九章 9.1 数组和数组元素(Arrays and Array Elements)
Array 的元素可以是任何类型,各个元素的类型也可以互不相同。甚至可以是数组类型,这样就可以创建数组的数组。
9.1.1 数组的创建方法:
var a = new Array();
// 创建一个数组的同时允许指定开始的 n 个元素
var a = new Array(5, 4, 3, 2, 1, "testing, testing");
// 仅仅指定数组的长度,这个例子创建了 10 个 undefined 元素
var a = new Array(10);
还可以通过数组字面值(array literals) 的形式创建数组:
var a = ['a', true, 4.78];
// array literal 中还可以包含 object literal 或者 array literal
var b = [[1, {x:1, y:2}], [2, {x:3, y:4}]];
访问或者设定数组的元素可以简单的用 数组名[索引] 语法。索引必须是正整数(232 - 1) 。如果用其他的类型,诸如 boolean, float 之类的,则 JavaScript 会把该值自动转换为 string. 然后用关联数组的语法来访问。所以下面的代码:
实际上是设定了一个 name 为 "-1.23" 的属性而已。
9.1.2 读写数组元素
通过类似 a[3] 的语法即可读写,没什么可说的。
9.1.3 添加元素
JavaScript 的数组是可变大小的。可以随时用下列语法给某个元素赋值:
Array 可以是稀疏的(sparse). 也就是说不一定要连续的指定值。JavaScript 解释器会自动的只给指定了值的那些元素分配内存。例如:
a[10000] = "this is element 10,000";
只会分配两个变量的内存给这个数组。
数组元素也可以指定给对象:
c[0] = "this is an array element of an object!";
这段代码也仅仅是添加了一个叫做 "0" 的属性。而这个 Object 并不会变为 Array. 只有通过 Array constructor 创建的,或者 array literal 才可以使用 Array 的一些特殊功能。
9.1.4 数组的长度
数组有 length 属性。这个值为数组中最大的索引 + 1. 例子:
a = new Array(10); // a.length == 10 (empty elements 0-9 defined)
a = new Array(1,2,3); // a.length == 3 (elements 0-2 defined)
a = [4, 5]; // a.length == 2 (elements 0 and 1 defined)
a[5] = -1; // a.length == 6 (elements 0, 1, and 5 defined)
a[49] = 0; // a.length == 50 (elements 0, 1, 5, and 49 defined)
length 属性最大的用处就是用于循环访问数组:
for(var i = 0; i < fruits.length; i++)
alert(fruits[i]);
上面的例子假定了所有的元素都是连续的。如果不是这样,我们可以在访问元素前先测试它是否已经定义:
if (fruits[i] != undefined) alert(fruits[i]);
length 属性是可以读写的。如果你设定为一个比当前元素索引小的,则后面的元素会自动被丢弃。反之,设定的很大的话,则会自动在后面填充 undefined 元素。
设定 length 为一个较小的值,是唯一缩短一个数组的方法。如果你用 delete 操作符,则只能把某个元素设定为 undefined. 而 length 不会变化。
9.1.5 多维数组(Multidimentional Arrays)
JavaScript 不支持多维数组。但你可以很好的通过数组的数组(arrays of arrays) 来做到类似的效果。比如: