it之路。

javascript 学习之 数组-读写数组元素

访问数组元素用[]操作符。同时需要对数组的引用和非负的索引,如:

value=a[0];

a[1]=3.14;

a[i]=3;

a[i+1]="hello";

因为数组是特殊的对象,可以对它定义非数字的属性并使用.或[]来访问它。

注意:数组的索引必须在0到232-1之间,如果你使用一个较大的,或者非正的,浮点的,或者其它任何非正的索引,javascript会把它转化为string类型并将它作为对象的属性来查找而不是作为数组的索引。比如说,下面的例子就不是定义了一个数组元素。

a[-1.32]=true;

类似于C或JAVA等其它的语言中,创建数组时你必须确定数组的元素个数,并且这个数字是固定不变的。而javascript中则不同,你可以随时改变数组的大小。

向数组中添加一个元素:

a[10]=10;

数组中的值可能是稀疏的,这意味着数组的索引可能不是一系列连串的数字。javascript执行程序只为那些实际存储在数组中的元素分配内存空间。因此,在如下的代码中,系统将只为索引为0和1000的元素分配内存,中间的998个则不分配。

a[0]=1;

a[1000]="this is element 1000";

注意,数组元素也可以被添加到对象中。如:

var c=new Circle(1,2,3);

c[0]="this is an array element of an object";

例子只为c这个对象定义了一个叫做0的属性,添加数组元素并不会使它变成为一个数组。

删除数组元素

delete操作符将数组元素的值设为undefined,但数组元素本身仍然存在。为了在真正意义上删除数组元素,将所以该元素后面的元素向前移一个单位,必须使用javascript为我们提供的方法:

Array.shift()删除数组的第一个元素

Array.pop()删除数组的最后一个元素

Array.splice()删除一连串的元素

所有的数组,不论是用中括号创建的还是用构造函数创建的,都有一个length属性表明数组中元素的个数。和对象的属性不同的是,当有元素被添加到Array中时,Array的length属性是自动更新的。如下列代码中的注释:

var a = new Array(); // length==0

var a = new Array(10); // length==10

var a = new Array(1,2,3);// length==3

var a= [4,5]; // length==2

a[49]=0; // length==50

a[5]=-1; // length==6

记住,Array的最大索引必须小于232-1,那就意味着Array的length的最大可能的值为232-1。

Array的length属性最常的用处就是遍历数组,如:

var fruits=["mango","banana","apple"];

for(var i=0;i<fruits.length;i++)

{

alert(fruits[i]);

}

当然,在引用元素数组之前,最后测试一下数组中的每个元素是否被定义过了。

for(var i=0;i<fruits.length;i++)

{

if(fruits[i]){ alert(fruits[i]);}

}

你可以用同样的方法来初始化数组的每个元素。

var a=new Array(100);

for(var i=0;i<a.length;i++)

{

a[i]=i;

}

Array的length是一个可读写的值,如果length的属性被设定为小于当前length的值,那么多余的元素会被丢弃。相反,如果大于当前的值,undefined将被添加到数组中。

javascript并不支持真正意义的上多维数组,但它允许用数组中的数组来模仿它。

为了存取数组中的数组的元素的值,使用两次方括号就可以了。如下:

// 首先创建一个多维数组

var table=new Array(10);

for(var i=0;i<table.length;i++)

{

table[i]=new Array(10);

}

// 初始化数组

for(var row=0;row<table.length;row++)

{

for(var col=0;col<table[row].length;col++)

table[row][col]=row*col;

}

// 用这个多维数组来计算一下

var a=table[5][7]; // 35;

posted @ 2009-03-27 13:08  3912.77  阅读(2557)  评论(0编辑  收藏  举报