现在的位置: 首页 > 综合 > 正文

js 数组

2017年11月20日 ⁄ 综合 ⁄ 共 1526字 ⁄ 字号 评论关闭

数组声明方式:

var empty=[];

var primes=[2,3];

var misc=[1.1,true,'a'];

一个数组的直接量中 的值不一定要求是个静态量,它可以是任意表达式:

var base=1;

var table=[base,base+1];

也可以声明内容是undefined的数组

var undefs=[,,];

数组也可以用构造函数来创建:

var a = new Array();  //效果等同于[],空数组

var b = new Array(9);//长度为9的数组

var c = new Array(5,4,3,'test',true);

访问数组元素a[0]。注意数组的下标必须是0到2G之间的正整数,否则这个下标会自动转换成字符串,成为关联数组访问属性。说到这里,数组其实是一种特殊的对象,所以呢数组也有属性。假设a是个数组,那么a['hello']访问的是a中的hello属性。这个特点很有意思。

给数组添加新元素

js的数组可以具有任意个数的元素,即可以在任何时刻改变元素的个数。比如我要添加一个新元素,只要a[8]=10;这样就加上去了。在js中数组是稀疏的,意味着数组的下标不必是连续的,只有那些真正存储在数组中的元素才能够由js实现分配到内存。假设a中只有下标为1和1000两个元素,那么js解释器就只给1和1000两个元素分配内存。

还有一个比较怪异的用法,我称之为使用数组下标的语法来给一个对象属性赋值,汉译本原文是数组元素也可以被添加到对象中:

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

c[0]="hello";

这样的效果只不过是给C对象又定义了一个新的名字叫"0"的属性,c并不会成为数组。

删除数组元素:

delete运算符把一个数组元素设置为undefined,但是元素本身还是继续存在的。要真正的删除该元素,以使下标位置高于它的所有元素都向下迁移到较低的下标位置,那么必须使用一个数组方法。Array.shift()方法删除数组的第一个元素,Array.pop()方法删除掉最后一个元素,Array.splice()从一个数组中删除一个连续范围内的元素。详细使用以后再说。

数组的长度:

数组长度存储在数组的length属性中。它用来说明这个数组包含的元素个数。但是!之前说过js的数组是稀疏的,也就是下标不一定是连续的。比如:

var a = new Array(1,2);

a[10]=3;

alert(a.length);

结果是11 。但是在内存中这个数组只存储了3个元素。所以唯一影响length的值的因素就是数组的最大下标,length是数组的最大下标+1。

遍历数组:

通常:

var a=[1,2];

for(var i=0;i<a.length;i++){
        alert(a[i]);    
    }

但是如果这个数组的元素不是连续的,比如在a声明之后又有一句a[5]=0;那么循环会执行6次,有三个undefined。如果只想给那些定义过的元素循环,只需要在for中增加一个判断条件if(a[i])

截断或增长数组

数组的length既可以读也可以写。如果给length设置了一个比它当前值小的值,那么数组将会被截断。这个长度之外的元素都会被抛弃,它们的值也就丢失了。

如果给length设的值比当前值大,那么新的、未定义的元素会被加到数组末尾。  尽管可以使用数组下标的语法来给一个对象属性赋值(汉译原文是尽管可以将对象赋给数组元素,牛头不对马嘴),但是对象没有length属性。因此length属性成了数组最重要的特性,这使得它有别于其他对象的特性。

多维数组

因为js数组的元素可以是数组,这样也就成了多维数组。访问多维数组语法跟java是一样的。比如a[i][j];

抱歉!评论已关闭.