除了第一种方式使用数组/对象字面量和第二种方式使用数组/对象构造函数之外,这些定义之间没有太大区别。
数组构造函数可能会返回不同的结果,具体取决于传入的参数数量。如果传入一个参数,则会创建一个具有该参数长度的新空数组。例如:
// 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 中做了一个speed test,其中我定义了 20 次 10000000 相同的数组 1, 2, 3,得到了这些结果:
Average speed per 10000000 calls
Array Constructor : 226.55 ms
Array Literal : 159.1 ms
如您所见,数组字面量每 10000000 个数组定义快 67.45 毫秒。