js数组的下标问题

该文章由 leevare 发布于 ,归类于 Javascript

我们可以使用new Array()的方式或者字面量的方式创建新的数组。

var a = new Array(1, 2, 3);
var a = [1, 2, 3];

这两种方式都会创建一个[1,2,3]的数组。这样数组就会自动为其创建索引,并更新 length 值,所以上述创建的数组length返回的值为3

同时,js数组也支持自定义下标的方式,例如

var obj = {
    name: 'test'
};

a['custom'] = obj;

这样custom就相当于数组的一个属性了,与之前的方式不同的是,它不会自动更新length值,既然不是一个正常的数组索引,那么对于数组的大部分方法对它就不适用了。

var a = [1, 2, 3];

var obj = {
    name: 'test'
};

a['custom'] = obj;

console.log(a);  //[ 1, 2, 3, custom: { name: 'test' } ]

console.log(a.length);  //3

可以看到,新添加的a['custom']并没有计入length值。那么对于pop()push()等等这样的方法,也是操作数组的索引的,对于自定义属性,对其就不适用了。

var a = [1, 2, 3];

var obj = {
    name: 'test'
};

a['custom'] = obj;

console.log(a.pop());  //3 预期返回obj,结果返回了3

console.log(a);  //[ 1, 2, custom: { name: 'test' } ]

console.log(Object.keys(a), a.length); //[ '0', '1', 'custom' ] 2

所以,在使用自定义数组下标值的时候一定要注意数组的这个特性。

如果觉得我的文章对您有用,请您随意打赏。您的支持将鼓励我更加努力创作!

相关文章:

说点什么

avatar
300
  Subscribe  
提醒