JavaScript数组与对象的关系

JavaScript的数组,相比其他语言,是比较特殊的。数组是Object类型,只不过,有几个比较特殊的地方:

  1. 有索引下标
  2. 有默认的length属性
  3. 是有序的(注意,对象是无序的)
  4. 可以使用一些特殊的数组方法,比如,forEach, filter, map等等
 1 var a = [1,2]; 
 2 a['r'] = 6; 
 3 for(var key in a)
 4 {
 5     console.log('key:'+key + ';value:' + a[key]); 
 6 }
 7 
 8 // output
 9 key:0;value:1
10 key:1;value:2
11 key:r;value:6

 

可以看到,如果不指定key值,数组会自动添加默认索引下标值,将其作为key。

这种情况下,length又是如何计算的呢?

 

 1 var a = [1,2]; 
 2 a['r'] = 6; 
 3 console.log(a.length); //output: 2
 4 
 5 var b = []; 
 6 b[0]=1; 
 7 b[2]=5;
 8 console.log(b.length); //output: 3

从上面的代码可以看出,length值是根据最大的索引下标计算的,也就是说,

  1. 为了改变length的值,必须给数组设置key为number的value;
  2. length = 最大的number key的值 + 1;

那么,如果在数组上面应用Object的delete方法会怎么样呢?

1 var a = [1,2]; 
2 a['r'] = 6; 
3 delete a[1]; 
4 
5 console.log(a.length);    // output: 2
6 console.log(a);           // output: [1, undefined]

利用delete可以删除数组的元素值,但是,无法删除它的索引下标,所以,数组的length值不会改变。

如果要真正的删除数组元素,必须使用splice函数,如下:

var a = [1,2]; 
a['r'] = 6; 
a.splice(1,1); 
console.log(a); //output: [1]

 

posted @ 2016-12-18 00:12  etianqq  阅读(1027)  评论(0编辑  收藏  举报