2011-04-29 111 views
31

我剛開始考慮這個問題,但無法在jsFiddle附近暴露自己的任何區別。在JavaScript中Array(1)和new Array(1)有什麼區別?

var a = new Array(1), 
    b = Array(1); 

console.log(a, b); 

輸出是兩個具有一個未定義成員的數組。

做一個for (in)顯示它們具有相同的屬性。

這些之間的區別是什麼?第一個是否明確地實例化對象?

請不要講我使用數組文字符號,因爲我已經知道這一點。我更願意填補我上面解釋的知識空白。

+1

[JS中的新關鍵字](http://stackoverflow.com/questions/1646698/what-is-the-new-keyword-in-javascript) – 2011-04-29 01:48:58

+0

我將採取一個野生刺傷它,並說新意味着它是一個沒有新的東西的對象不是。新的將有這裏描述的方法http://www.w3schools.com/jsref/jsref_obj_array.asp而沒有新的不會。 – Flipper 2011-04-29 01:49:17

+0

@Flipper我遍歷每個屬性,他們都似乎有相同的方法。 – alex 2011-04-29 01:49:54

回答

31

Array,兩者都是等價的。

15.4.1 Array構造函數作爲函數調用

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

ECMA-262, 3th Edition(與5th Edition相似)。

4

不同之處在於Array函數的實現。不使用新操作符對Array進行調用是否會返回Array的一個實例,取決於實現。例如Mozilla的SpiderMonkey引擎就是這樣做的:

static JSBool 
Array(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) 
{ 
    jsuint length; 
    jsval *vector; 

    /* If called without new, replace obj with a new Array object. */ 

這是一個來自實際源的實際評論。下面的代碼行不在這裏轉載。我想其他引擎也會這樣做。否則,行爲是不確定的。關於這個話題的一個很好的閱讀是John Resig的帖子here

5

根據JavaScript權威指南(第5版),602頁,「當Array()構造函數作爲函數調用,而不new運營商,它的行爲完全因爲它在與new運營商稱爲」。

相關問題