在Javascript中预定义数组长度

在Javascript中预定义数组长度,javascript,arrays,optimization,Javascript,Arrays,Optimization,在将项目推入Javascript数组时,预定义该数组的长度是否会提高性能 例如,假设您正在这样做: var item1 = "apple", item2 = "orange", item3 = "sports car"; // Because I said so, that's why. var myArray = []; // Empty array with initial length of 0 myArray.push(item1); console.log(myA

在将项目推入Javascript数组时,预定义该数组的长度是否会提高性能

例如,假设您正在这样做:

var item1 = "apple",
    item2 = "orange",
    item3 = "sports car"; // Because I said so, that's why.

var myArray = [];  // Empty array with initial length of 0

myArray.push(item1);
console.log(myArray.length) // 1

myArray.push(item2);
console.log(myArray.length) // 2

myArray.push(item3);
console.log(myArray.length) // 3
在上面的代码中,每次推送时都会重新计算myArray的长度。或者

var item1 = "apple",
item2 = "orange",
item3 = "sports car";

var myArray = Array(3) // Assume we already know exactly how many items will be added
myArray[0] = item1;
console.log(myArray.length) // 3

myArray[1] = item2;
console.log(myArray.length) // 3

myArray[2] = item3;
console.log(myArray.length) // 3
我的问题是,当您显式地将值分配给数组中预先存在的插槽时,该数组的长度属性仍然会重新计算。如果不是,绕过该过程是否会产生更快的阵列填充

不用说,这更多的是一个理论上的练习,而不是一个实际的问题。

根据,预先定义长度要快很多


应该注意的是,
newarray()
语法并不是最佳实践。如果你绝对需要压缩最后一点性能,考虑一下这个。否则,让您和所有接触您的代码的开发人员的生活更轻松,使用
[]

一些人在一个非常相关的问题上进行基准测试:数组文本更快,因为您不需要调用构造函数(或运行额外的函数),但我不确定您的特定问题。我怀疑这是否真的有什么区别。我想事先设置长度可能会加快以后的插入速度。我想长度属性不会重新计算,它将始终为3!我的意思是如果你不添加
myArray[2]=item3长度仍然显示为3而不是2,因为第三个插槽将采用默认值JSPERF非常适合此类实际测试。你的测试。。这里并不是比较苹果和苹果,因为您的第二个示例没有使用push,这通常比只分配索引要慢一些。查看所有变化(定义/未定义长度、按索引推送/分配)会很有趣。但是一个有趣的结果是,我将添加一个非推送版本。