先に結論
2要素以上の空配列を生成したい場合以外では、リテラルのほうが良さそう
サンプル
コンストラクタ
var a = new Array(); //要素数0の空配列 []
var b = new Array(2); //要素数2の空配列 [ , ]
var c = new Array(3.14); //runtime error
var d = new Array(1, 'constructor'); //[1,'constructor']
リテラル
var a = []; //要素数0の空配列 []
var b = [2]; //[2]
var c = [3.14]; //[3.14]
var d = [2, 'literal']; //[2, 'literal']
比較
- コンストラクタでは要素数を指定した空配列の生成が可能
- コンストラクタでは数値データ1つのみの配列の生成は出来ない
- 使用するエンジンや実行環境によるものの、リテラルのほうが早い1
-
Array
をユーザが再定義している場合コンストラクタは使えなくなる2
- MDNでリテラルのほうを積極的に使用している
- JavaScript: The Good Partsでリテラルの使用が勧められているようだ3
余談 〜オブジェクトの場合〜
オブジェクトのリテラル []
とコンストラクタ new Object()
についても同様に、
- リテラルのほうが早い1
- コンストラクタが再定義されてしまう懸念がある
- JavaScript: The Good Partsでリテラルの使用が勧められているよう3
なので、リテラルで良さそう。
Object - JavaScript | MDN
javascript - What is the difference between new Object()
and object literal notation? - Stack Overflow
-
リテラル, コンストラクタ, それぞれのオブジェクト生成方法のプロファイリングをやってみた - きたけーのアウトプット ↩ ↩2
-
Arrayは予約語ではないので再定義できてしまう 予約語 - JavaScript | MDN ↩
-
「new Objectとnew Arrayの利用も避けるべきである。代わりに {} と [] を使えばよい」 via [JavaScript][読書] 『JavaScript:The Good Parts ―「良いパーツ」 - itouhiroメモ ↩ ↩2