使用 var arr=[]; 比使用 var arr=new Array(); 更好么?

8

写代码时,是更好地使用

var arr=[]; then var arr=new Array(); 
var obj={}; then var obj=new Object();

如果是这样,为什么呢?

我阅读了幻灯片讲义第36页关于这个想法的内容,但没有给出解释或者例子说明为什么它更好。


1
好问题!在我看来,从代码美学的角度来看,new Array() 看起来更加简洁。很想看看会有什么结果。 - Pekka
提出的重复项没有提到对象。 - Álvaro González
3个回答

8

这些定义之间没有太大的区别,除了第一种方法使用数组/对象字面量,第二种使用数组/对象构造函数。

数组构造函数可能会根据传入的参数数量返回不同的结果。如果您传入一个参数,则创建一个新的长度为该参数的空数组。例如:

// arr1 is the same as arr2
var arr1 = new Array(1, 2, 3, 4);
var arr2 = [1, 2, 3, 4];

alert(arr1.length == arr2.length); // true
alert(arr1[0]); // 1
alert(arr2[0]); // 1

但是,只传入一个参数会产生不同的结果:

// arr3 has length 200 and is empty, while arr4 has length 1 and contains a number
var arr3 = new Array(200);
var arr4 = [200];

alert(arr3.length == arr4.length); // false
alert(arr3[0]); // 'undefined'
alert(arr4[0]); // 200

当然,定义数组或对象最快的方法是使用字面量方式,因为您不需要先调用构造函数。但实际的速度差异微乎其微。

我在 Chrome 6 中进行了速度测试,其中我定义了20个包含10000000个相同数组1, 2, 3的测试用例,结果如下:

Average speed per 10000000 calls
Array Constructor  : 226.55 ms
Array Literal      : 159.1  ms

如您所见,相比于10000000个数组定义,数组字面量要快67.45ms。


这里的问题是什么更快地运行计算机。 - Ben
虽然Array构造函数根据参数的数量不同而有所不同,这是一个有趣的观点,但我认为在比较两种创建数组的方式时将其列为差异是完全误导人的。[]不是一个你用参数调用的方法,就像var a = "test"不是传递给""函数的四个参数一样。它只是一种用于创建数组的语法,只隐含地处理分配维度的操作。 - David Hedlund
3
http://jsperf.com/literal-vs-constructor-array - James
@J-P 很棒的测试页面;操作/时间比时间/操作更好... 我的测试在Firefox上失败,因为我得到了这个“停止脚本”弹窗。 - Harmen

1

Thomas Fuchs在他的幻灯片中说,在那个视频下面(第20页上说“拥抱语言”部分): var arr=[]和var obj={}更好,而且稍微快一点。我不确定为什么,但无论如何,这是一个非常有趣的幻灯片 :)


1
从典型的程序员角度来看,似乎您倾向于使用“var arr = new Array();”来给出典型对象实例化的感觉。但在JavaScript中,通常最好使用“var arr = [];” 个人而言,我并没有看到使用这两种方式有太大的区别,除了由Harmen解释的一个参数。 另请查看此链接 - http://yuiblog.com/blog/2006/11/13/javascript-we-hardly-new-ya/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接