我可以将一个项目添加到数组中,并且我可以访问该项目,但是length
报告0
. Why?
var arr = [];
arr[4294967300] = "My item";
console.log(arr[4294967300], arr.length); // Outputs "My item", 0
这是因为索引太大,以至于它变成了属性,因此长度为 0。
根据ECMAScript 文档,特定值 p 只能是数组索引当且仅当:
(p >>> 0 === p) && (p >>> 0 !== Math.pow(2, 32) - 1)
Where >>> 0
相当于ToUint32()
。在你的情况下:
4294967300 >>> 0 // 4
根据定义,length
property 始终比最大有效索引的数值大 1;负指数会给你同样的行为,例如
arr[-1] = 'hello world';
arr.length; // 0
arr['-1']; // 'hello world'
如果您的数字范围在有效(并用作索引)和“无效”(将其转换为属性)之间,那么最好将所有索引转换为字符串并一直使用属性(开始和{}
代替Array
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)