为什么要按大小更快地迭代数组

Bob*_*kin 3 javascript arrays performance v8 jsperf

在第一个例子中,我创建了长度为1000的空数组:

var arr = new Array(1000);

for (var i = 0; i < arr.length; i++)
  arr[i] = i;
Run Code Online (Sandbox Code Playgroud)

在第二个示例中创建了长度为0的空数组:

var arr = [];

for (var i = 0; i < 1000; i++)
  arr.push(i);
Run Code Online (Sandbox Code Playgroud)

在OS X 10.10.3上的Chrome 41.0.2272.118中进行测试,第一个块运行得更快.为什么?因为JavaScript引擎知道数组大小?

基准测试在这里http://jsperf.com/poerttest/2.

小智 6

如果不指定数组大小,则必须继续分配更多空间.但是如果你在开头指定大小,它只分配一次.

  • @dandavis的第二个和第三个例子是相同的,因为第三个例子中的数组大小是2000. (2认同)
  • 它不仅需要分配更多的空间 - 它还需要在每次一次又一次地增长时复制内容.它将"O(n)"算法转换为"O(n ^ 2)"算法 (2认同)