js数组的下标问题

我们可以使用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

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

如果您觉得本文对您有用,欢迎捐赠或留言~
微信支付
支付宝

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注