写得更好:var arr = []; 比var arr = new Array();?

Yos*_*sef 6 javascript

写作更好吗?

var arr=[]; then var arr=new Array(); 
var obj={}; then var obj=new Object();
Run Code Online (Sandbox Code Playgroud)

如果是这样,为什么?

我阅读了关于这个想法的幻灯片第36页,但没有给出解释或示例为什么它更好.

Har*_*men 7

这些定义之间没有太大区别,除了第一种方式使用数组/对象文字,第二种方式使用数组/对象构造函数.

数组构造函数可能会返回不同的结果,具体取决于传入的参数数量.如果传入一个参数,则会创建一个新的空数组,该数组的长度为该参数.例如:

// 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
Run Code Online (Sandbox Code Playgroud)

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

// 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
Run Code Online (Sandbox Code Playgroud)

定义数组或对象的最快方法当然是文字方式,因为您不需要先调用构造函数.无论如何,真正的实际速度差异可以忽略不计.

我在Chrome 6中进行了速度测试,其中我将相同的阵列定义了20倍10000000 1, 2, 3,这给出了以下结果:

Average speed per 10000000 calls
Array Constructor  : 226.55 ms
Array Literal      : 159.1  ms
Run Code Online (Sandbox Code Playgroud)

如您所见,每10000000个数组定义的数组文字快67,45ms.

  • http://jsperf.com/literal-vs-constructor-array (3认同)

归档时间:

查看次数:

5319 次

最近记录:

8 年,3 月 前