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