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

标签 javascript arrays

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

var a = ["a","b","c"];
a[4294967300] = "d";
console.log(a[4294967300]);

它显示输出“d”并且没有异常或错误。我在这里错过了什么吗?有人可以阐明这个主题并分享一些有关 JavaScript 中的最大数组项以及与之相关的各种场景的知识吗?

最佳答案

数组不必包含从 0N 的所有项目,也可以包含索引为 N 的项目。

这是因为 JavaScript 引擎中的数组可以在孔太大时切换到字典模式,这些数组称为稀疏数组(与密集数组相比)。 p>

了解这一区别很重要,因为实现在一点上存在漏洞:性能。您应该阅读有关此主题的文章:http://www.html5rocks.com/en/tutorials/speed/v8/

但对于从 2³² 开始的索引,sebcap26 是正确的,由于索引是作为字符串处理的,因此存在区别。这种区别很重要,可以通过记录 a.length 来验证:您会看到长度不受此类元素的影响。 本身 没有异常或错误,但它使得无法使用正常的数组操作,如迭代到长度或使用数组函数,如 mapfilter(索引大于数字索引限制的元素将被这些函数忽略)。

关于javascript - 在javascript中访问超出其大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23866564/

相关文章:

javascript - Angular 绑定(bind)到带空格的方括号表示法属性

JavaScript 按值复制数组

php - 如何使用 onChange 传递多个值来更新 php 表中的数据库

javascript - AngularJS,将资源服务json保存到本地存储并有条件地更新

javascript - 如何用方向归一化加速度?

javascript - 为什么将鼠标悬停在图像固定按钮上不会出现

arrays - 使用 loop 和 grep 处理子文件夹

arrays - Yii2 数组排序

c - bool 数组的排列

java - 在 Java 中向二维数组提供元素,为什么不起作用?