javascript - 为什么不能用索引访问这个数组?

标签 javascript arrays object

为什么这个数组的 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/

相关文章:

javascript - 如何迭代和比较 JS 对象中的值?

javascript - 如何从插件调用 javascript 或在 Microsoft Dynamics 2015 中刷新页面

Javascript 查找除 <a> 标签中的文本之外的所有文本

javascript - react-bootstrap-table - 自己的分页项目数

c++ - 我应该使用 vector 而不是数组吗?

arrays - 将 SUMPRODUCT 与 AND 和 OR 逻辑一起使用时遇到问题

javascript - Promise.resolve 对象不是构造函数

javascript - 为数组加载更多按钮

java - Java中如何将数组解析为对象

excel - Excel对象库文件在哪里