2010-05-31 75 views

回答

13

這可能是因爲Array對象可以在JavaScript中被覆蓋,但是數組文字符號不能。見this answer爲例

+3

這取決於每個實施雖然創建陣列。至少在過去[]中,在一些JS引擎中使用了Array構造函數(iirc通過覆蓋數組構造函數,對於能夠爲JSONP請求捕獲數組創建的腳本模糊不清)。 – 2010-05-31 15:18:33

+0

@reko_t - 這是非常真實的。我知道在Firefox的數組文字不使用數組構造函數,不知道其他人(目前沒有辦法檢查,有人可以確認嗎?) – 2010-05-31 15:22:33

+0

有人能夠修復鏈接嗎? iPhone編輯比較棘手:) – 2010-05-31 15:23:27

11

還要注意的是這樣做的:

var x = [5]; 

比做不同:

var x = new Array(5); 

前者創建與5的值一個元素之後的初始化數組用5個未定義元素創建一個數組。

+11

而且,爲了使它更有趣,'new Array(1,2)'等於'[1,2]'。 – 2010-05-31 15:23:14

3

這是打字少,這在我的書總是贏:-)

一旦我固定在我們的頁面中的一個奇怪的錯誤。該頁面希望創建一個數字數據庫鍵列表作爲一個Javascript數組。鍵總是大整數(高位始終設置爲指示符)。原代碼看起來像:

var ids = new Array(${the.list}); 

那麼,猜猜當列表中只有一個值時發生了什麼?

var ids = new Array(200010123); 

這意味着,「創建一個數組並初始化它,以便有2億空條目」。

+0

實際上是20. – BalusC 2010-05-31 15:18:33

+0

哦,無論如何 - 我無法準確地記得ID的樣子,但它足夠大以至於導致即時內存不足 – Pointy 2010-05-31 15:36:15

1

通常,數組文字(var a = [1,2,3]或a = [])是要走的路。

但是偶爾需要一個數組,其長度本身就是數組的定義特徵。

變種A =陣列(N)將(使用文字)需要兩個以下詞組

變種A = [];則爲a.length = N;

在任何情況下,您都不需要使用Array構造函數的'new'運算符, 並不像您需要使用新的Date對象的'new'那樣。

1

要在不長

var arr = []; 

創建陣列要與長度更動態

var arr; 
(arr = []).length = 10; // 10 is array length 

要創建具有長數組動力較小

var arr = []; 
arr.length = 10;