javascript - 为什么要在 "new Array(arrayLength)"中设置 arrayLength?

标签 javascript arrays

例如:

array1 = new Array(5); array2 = new Array(10);

console.log(array1)console.log(array2) 都会返回 []。 那么这里arrayLength的作用是什么?

最佳答案

JavaScript 隐藏了许多您在使用许多其他语言的数组时通常必须处理的细节。例如,JavaScript 中的数组可以在您向其推送值时自动增长。

然而,在幕后,运行时仍在处理 C 或 Java 等语言让开发人员可见的内存分配问题。运行时可能会留出一些额外的内存供数组增长,然后一旦它用完了连续的内存空间,它就会在其他地方重新分配一 block 更大的内存,并从第一组内存中复制所有值到另一个位置。

(这大大简化了事情,但希望您能理解总体思路。)

如果您提前确切知道可以将多少项放入数组中,使用 new Array(number) 将向运行时提示它可以从分配那么多内存开始,并避免随着内存的增长而重新分配和复制内存。

在这种情况下,例如,this page建议采用以下做法以在 V8 javascript 引擎中实现最佳性能:

  • 不要预先分配大数组(例如 > 64K 元素)到它们的最大大小,而是随着你的增长而增长
  • 为固定大小的小数组使用数组文字进行初始化
  • 在使用前预先分配小数组 (<64k) 以修正大小

关于javascript - 为什么要在 "new Array(arrayLength)"中设置 arrayLength?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224943/

相关文章:

javascript - 使用另一个属性值更改数组中对象的属性值

java - 数组内的除数

c# - C# SSIS 中的 JSON 序列化

javascript - Node typescript 客户端调试

javascript - Mozilla 插件。 required(sdk/tabs).attach() 不起作用

javascript - 将javascript数组发送到服务器

javascript - 是否有一种 ES6 方法可以在数组中搜索包含另一个数组元素的元素?

javascript - 如何将具有相同键的对象数组分组为单个数组中的对象?

c# - 定义动态数组

javascript - 如何制作一个 NodeJS 服务器,在连接时按时间间隔逐行发出字符串文件?