我在一本书中读到,JavaScript 中的数组可以容纳 4,294,967,295 个项目,如果超过这个数字就会抛出异常。 我使用以下代码尝试了该功能:
var a = ["a","b","c"];
a[4294967300] = "d";
console.log(a[4294967300]);
它显示输出“d”并且没有异常或错误。我在这里错过了什么吗?有人可以阐明这个主题并分享一些有关 JavaScript 中的最大数组项以及与之相关的各种场景的知识吗?
最佳答案
数组不必包含从 0
到 N
的所有项目,也可以包含索引为 N
的项目。
这是因为 JavaScript 引擎中的数组可以在孔太大时切换到字典模式,这些数组称为稀疏数组(与密集数组相比)。 p>
了解这一区别很重要,因为实现在一点上存在漏洞:性能。您应该阅读有关此主题的文章:http://www.html5rocks.com/en/tutorials/speed/v8/
但对于从 2³² 开始的索引,sebcap26 是正确的,由于索引是作为字符串处理的,因此存在区别。这种区别很重要,可以通过记录 a.length
来验证:您会看到长度不受此类元素的影响。 本身 没有异常或错误,但它使得无法使用正常的数组操作,如迭代到长度或使用数组函数,如 map
或 filter
(索引大于数字索引限制的元素将被这些函数忽略)。
关于javascript - 在javascript中访问超出其大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23866564/