为什么这个数组的 length
属性为 0?作为该问题的后续,为什么不能使用索引值访问此数组中的项目?
考虑以下因素:
var box = [];
box['material'] = 'cardboard';
box['size'] = 'small';
box.length; //0
console.log(box);
//[ material: 'cardboard', size: 'small' ]
box[0]; //undefined
但是,当我执行以下操作时:
var box = [];
box['0'] = true;
box['1'] = 'cardboard';
box['2'] = 'some value';
box.length; //3
box[0];// true
为什么在这种情况下它会输出正确的长度,因为“0”是字符串而不是数字,并且使用 0 索引访问正确的项目?
最佳答案
在 JavaScript 中,数组的长度始终比最大的数字(整数)属性名称大 1。数组可以具有名称不是数字的属性,但它们不计入数组的长度(并且在其他一些重要情况下会被忽略)。
对象属性名称始终为字符串,但解释为数字时为非负整数值的字符串在数组中是特殊的。使用数值访问属性是可行的,因为数字首先被转换为字符串;因此 box[0]
和 box['0']
执行完全相同的操作。
关于javascript - 为什么不能用索引访问这个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39427962/