Array
構造函數
由於 Array
的構造函數在如何處理參數時有點模棱兩可,因此總是推薦使用數組的字面語法 -[]
- 來創建數組。
[1, 2, 3]; // 結果: [1, 2, 3]
new Array(1, 2, 3); // 結果: [1, 2, 3]
[3]; // 結果: [3]
new Array(3); // 結果: []
new Array('3') // 結果: ['3']
// 譯者注:因此下面的代碼將會使人很迷惑
new Array(3, 4, 5); // 結果: [3, 4, 5]
new Array(3) // 結果: [],此數組長度爲 3
譯者注:這裏的模棱兩可指的是數組的兩種構造函數語法
由於只有一個參數傳遞到構造函數中(譯者注:指的是 new Array(3);
這種調用方式),並且這個參數是數字,構造函數會返回一個 length
屬性被設置爲此參數的空數組。
需要特別注意的是,此時只有 length
屬性被設置,真正的數組並沒有生成。
譯者注:在 Firebug 中,你會看到
[undefined, undefined, undefined]
,這其實是不對的。在上一節有詳細的分析。
var arr = new Array(3);
arr[1]; // undefined
1 in arr; // false, 數組還沒有生成
這種優先於設置數組長度屬性的做法只在少數幾種情況下有用,比如需要循環字符串,可以避免for
循環的麻煩。
new Array(count + 1).join(stringToRepeat);
譯者注:
new Array(3).join('#')
將會返回##
結論
應該儘量避免使用數組構造函數創建新數組。推薦使用數組的字面語法。它們更加短小和簡潔,因此增加了代碼的可讀性。