2011-11-20 18 views
20

有什麼區別(如果有的話)的CoffeeScript(或JavaScript用於該目的CoffeeScript的「陣列()」與「新的Array()」

之間
x = Array() 

x = new Array() 

)?我應該使用哪一個?

+0

你可能會發現這個有趣的:http://stackoverflow.com/questions/383402/is-javascript-s-new-keyword-considered-harmful – nickd

回答

29

spec說:

Array被稱爲函數,而不是作爲一個構造函數,它創建和初始化一個新的Array對象。因此函數調用Array(…)等價於具有相同參數的對象創建表達式new Array(…)

5

我相信兩者都是等價的。然而,在JavaScript中至少,你應該總是用文字語法:

x = [] 

但基於在我的瀏覽器的一些測試,Array(1, 2, 3)給出了相同的結果new Array(1, 2, 3),並用相同和Array(15)new Array(15)。或者只是簡單的new Array()

+0

正確,有完全相同的。 – Raynos

+0

您應該在JavaScript和CoffeeScript中使用'x = []',除非您需要預先設定數組的大小。 –

+0

mu是完全正確的:使用'arr = new Array(n)'(其中'n'是一個數字)當且僅當您正在做一些性能密集型的事情時,你會知道該數組將有多大,所以所需的內存一次全部分配(原則上)。 –

9

您應該使用文字[]。理由概述here。使用Array()構造可能是不明確的,因爲它可以接受元素的length或列表:

new Array(5) // [] 
new Array('5') // ['5'] 

[5] // [5] 
['5'] // ['5'] 

可以使用Array沒有new操作的原因是,在內部它與構造一個共同的伎倆:

function Thing(){ 
    if (!(this instanceof Thing)){ 
     return new Thing() 
    } 
    // ... define object 
} 

也就是說,如果您撥打Thing(),它會爲您撥打new Thing()