在javascript中定义数组

时间:2011-05-18 15:57:21

标签: javascript arrays

我想在javascript中创建一个数组并记住两种方法,所以我只想知道基本差异是什么,以及这两个“ styles ”中是否存在性能差异< / p>

var array_1 = new Array("fee","fie","foo","fum");
var array_2 = ['a','b','c'];

for (let i=0; i<array_1.length; i++){
  console.log(array_1[i])
}

for (let i=0; i<array_2.length; i++){
  console.log(array_2[i])
}

5 个答案:

答案 0 :(得分:43)

他们做同样的事情。 []表示法的优点是:

  • 它更短。
  • 如果有人做了一些愚蠢的事情,比如重新定义Array符号,它仍然有用。
  • 当您只定义单个条目时没有歧义,而当您编写new Array(3)时,如果您习惯于查看构造函数中列出的条目,则很容易误读为[3],实际上它创建了一个length为3且没有条目的新数组。
  • 它可能更快一点点(取决于JavaScript实现),因为当你说new Array时,解释器必须查找Array符号,这意味着遍历作用域链中的所有条目,直到它到达全局对象并找到它,而使用[]则不需要这样做。在正常使用情况下具有任何有形现实世界影响的几率很低。尽管如此......

因此有几个很好的理由可以使用[]

new Array的优势:

  • 您可以设置数组的初始长度,例如var a = new Array(3);

我几年没有任何理由这样做(不是因为学习了arrays aren't really arrays并且试图预先分配它们没有意义)。如果你真的想,你可以随时这样做:

var a = [];
a.length = 3;

答案 1 :(得分:4)

您的使用没有区别。

唯一真正的用法区别是将整数参数传递给new Array(),这将设置一个初始数组长度(使用[]数组 - 文字表示法无法做到这一点)。但是它们在您的用例中以任何一种方式创建相同的对象。

答案 2 :(得分:3)

这个benchmark on JSPerf显示数组文字形式通常比某些浏览器上的构造函数更快(并且在任何浏览器上都不慢)。

当然,这种行为完全取决于实现,因此您需要在自己的目标平台上运行自己的测试。

答案 3 :(得分:0)

我认为性能优势可以忽略不计。

请参阅http://jsperf.com/new-array-vs-literal-array/4

答案 4 :(得分:0)

我认为两种方式在性能方面是相同的,因为它们最终都会创建一个“数组对象”。所以一旦你开始访问数组,机制将是相同的。我不太确定构造数组的机制有多么不同(在性能方面),尽管它不应该是使用一种方式到另一种方式的任何显着增益。