web-dev-qa-db-ja.com

javascriptの配列リテラル表記とは何ですか?いつ使用する必要がありますか?

JSLintは私にこのエラーを与えています:

行11文字33の問題:配列リテラル表記[]を使用します。

_var myArray = new Array();
_

配列リテラル表記とは何ですか?なぜ代わりに使用したいのですか?

new Array();が正常に動作することをここに示しています...私が見逃しているものがありますか

63
Matt

配列リテラル表記は、空の括弧を使用して新しい配列を定義する場所です。あなたの例では:

var myArray = [];

それは配列を定義する「新しい」方法であり、私はそれがより短く/きれいだと思います。

以下の例は、それらの違いを説明しています。

var a = [],            // these are the same
    b = new Array(),   // a and b are arrays with length 0

    c = ['foo', 'bar'],           // these are the same
    d = new Array('foo', 'bar'),  // c and d are arrays with 2 strings

    // these are different:
    e = [3],             // e.length == 1, e[0] == 3
    f = new Array(3);   // f.length == 3, f[0] == undefined

参照JavaScript配列を宣言する際の「Array()」と「[]」の違いは何ですか?

91
CookieOfFortune

参照: var x = new Array();の何が問題なのか

Crockfordの議論とは別に、他の言語にも同じ構文を使用する同様のデータ構造があるという事実によるものだと思います。たとえば、 Pythonにはリストと辞書があります ;次の例を参照してください。

// this is a Python list
a = [66.25, 333, 333, 1, 1234.5]

// this is a Python dictionary
tel = {'jack': 4098, 'sape': 4139}

Pythonも文法的に正しいJavascriptですか?(はい、終了セミコロンがありませんが、Javascriptには必要ありません)

したがって、プログラミングで一般的なパラダイムを再利用することで、必要のないものを再学習する必要がなくなります。

23
ken

Crockfordの議論は別として、jsPerfはそれがより速いと言います。 http://jsperf.com/new-vs-literal-array-declaration

3
ecMode

@ecMode jsperfを見た後、さらにテストを行いました。

プッシュを使用して配列に追加する場合、Chromeでは新しいArray()がかなり高速です。

http://jsperf.com/new-vs-literal-array-declaration/2

[]の場合、インデックスを使用して追加する方が若干高速です。

0
Skeep