写代码时,是更好地使用
var arr=[]; then var arr=new Array();
var obj={}; then var obj=new Object();
如果是这样,为什么呢?
我阅读了幻灯片讲义第36页关于这个想法的内容,但没有给出解释或者例子说明为什么它更好。
写代码时,是更好地使用
var arr=[]; then var arr=new Array();
var obj={}; then var obj=new Object();
如果是这样,为什么呢?
我阅读了幻灯片讲义第36页关于这个想法的内容,但没有给出解释或者例子说明为什么它更好。
这些定义之间没有太大的区别,除了第一种方法使用数组/对象字面量,第二种使用数组/对象构造函数。
数组构造函数可能会根据传入的参数数量返回不同的结果。如果您传入一个参数,则创建一个新的长度为该参数的空数组。例如:
// 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。
Array
构造函数根据参数的数量不同而有所不同,这是一个有趣的观点,但我认为在比较两种创建数组的方式时将其列为差异是完全误导人的。[]
不是一个你用参数调用的方法,就像var a = "test"
不是传递给""
函数的四个参数一样。它只是一种用于创建数组的语法,只隐含地处理分配维度的操作。 - David HedlundThomas Fuchs在他的幻灯片中说,在那个视频下面(第20页上说“拥抱语言”部分): var arr=[]和var obj={}更好,而且稍微快一点。我不确定为什么,但无论如何,这是一个非常有趣的幻灯片 :)
new Array()
看起来更加简洁。很想看看会有什么结果。 - Pekka