Edited at

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

More than 3 years have passed since last update.


先に結論

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