在javascript中访问超出其大小的数组

tej*_*007 5 javascript arrays

我在一本特定的书中读到,JavaScript中的数组可以容纳4,294,967,295个项目,如果数量超出该数量,则会抛出异常.我使用以下代码尝试了该功能:

var a = ["a","b","c"];
a[4294967300] = "d";
console.log(a[4294967300]);
Run Code Online (Sandbox Code Playgroud)

它显示输出"d",没有异常或错误.我在这里错过了什么吗?有人可以对这个主题有所了解并分享一些关于JavaScript中的最大数组项目以及与之相关的各种场景的知识吗?

Den*_*ret 6

数组不必持有的所有项目从0N包含一个索引N.

这是因为当漏洞太大​​时,JavaScript引擎中的数组可以切换到字典模式,这些数组称为稀疏数组(与密集数组相比).

了解这种区别非常重要,因为实施正在泄漏一点:性能.您应该阅读以下主题:http://www.html5rocks.com/en/tutorials/speed/v8/

但是对于从2 32开始的索引,sebcap26是正确的,由于索引被处理为字符串这一事实有区别.这种区别很重要,可以通过记录来验证a.length:您将看到长度不受此类元素的影响.有没有异常或错误本身,但它使得不可能使用普通阵列操作像迭代直至长度或使用状阵列的功能mapfilter(具有索引不是数字索引限值大的元件由那些功能忽略).


Seb*_* C. 6

如果我很好地理解ECMAScript规范,那么不在[0 .. 2 ^ 32-1]中的索引将转换为String并用作Object键,而不是作为Array索引.

当且仅当ToString(ToUint32(P))等于P且ToUint32(P)不等于2 ^ 32-1时,属性名P(以String值的形式)是数组索引.