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;