JavaScript数组与对象的关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]

 

以上是关于JavaScript数组与对象的关系的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中Function函数与Object对象的关系

JavaScript 代码片段

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

JavaScript伪数组和数组

深入理解javascript原型和闭包——函数和对象的关系