第九章 9.1 数组和数组元素(Arrays and Array Elements)

Array 的元素可以是任何类型,各个元素的类型也可以互不相同。甚至可以是数组类型,这样就可以创建数组的数组。

9.1.1 数组的创建方法:

// 创建一个没有元素的数组
var a = new Array();

// 创建一个数组的同时允许指定开始的 n 个元素
var a = new Array(54321"testing, testing");

// 仅仅指定数组的长度,这个例子创建了 10 个 undefined 元素
var a = new Array(10);

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

var primes = [234711];
var a = ['a', true4.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. 然后用关联数组的语法来访问。所以下面的代码:

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)
= new Array(10);     // a.length == 10 (empty elements 0-9 defined)
= new Array(1,2,3);  // a.length == 3  (elements 0-2 defined)
= [45];            // 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]



 

posted on 2005-04-22 14:11  NeilChen  阅读(1061)  评论(0编辑  收藏  举报

导航