JavaScriptの配列の生成方法の違い 〜リテラル `[]` とコンストラクタ `new Array()` 〜


先に結論

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