71

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

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

var myArray = new Array();

配列リテラル表記とは何ですか?代わりにそれを使用する必要があるのはなぜですか?

ここに、new Array();正常に動作するはずのことが示されています...何か足りないものはありますか?

4

4 に答える 4

105

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

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()」と「[]」の違いは何ですか?

于 2009-07-07T20:38:53.420 に答える
23

参照: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にも必要ありません)

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

于 2009-07-07T23:19:46.637 に答える
3

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

于 2014-01-04T06:29:08.353 に答える
0

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

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

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

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

于 2014-04-25T14:22:16.007 に答える