为什么在“new Array(arrayLength)”中设置arrayLength?

时间:2015-05-13 20:50:12

标签: javascript arrays

例如:

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

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

2 个答案:

答案 0 :(得分:3)

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

然而,在幕后,运行时仍在处理与开发人员可见的C或Java等语言相同的内存分配问题。运行时可以为数组增加一些额外的内存,然后一旦它耗尽了连续的内存空间,它将在其他地方重新分配更大的内存并从第一组内存中复制所有值到另一个地方。

(这很大程度上过于简单化了,但希望你能得到一般的想法。)

如果您提前知道可以将多少项放入数组中,使用new Array(number)将为运行时提供一个提示,即可以通过分配那么多内存来开始,并避免需要记忆要在你长大的时候重新分配和复制。

有鉴于此,this page建议以下做法在V8 javascript引擎中实现最佳性能:

  • 不要将大型数组(例如> 64K元素)预先分配到最大尺寸,而是随着时间的推移而增长
  • 使用小型固定大小数组的数组文字初始化
  • 在使用之前预先分配小数组(<64k)以纠正大小

答案 1 :(得分:1)

将数字传递给console.log构造函数可设置数组的长度属性,而无需设置项目的索引(这就是new Array(count + 1).join(stringToRepeat); 未显示任何内容的原因)。

引用JavaScript Garden

  

能够预先设置数组的长度仅在少数情况下有用,例如重复一个字符串,避免使用循环。

以下是这样做的一个例子:

onCreate()