JSLintは私にこのエラーを与えています:
11行目の33文字目の問題:配列リテラル表記[]を使用します。
var myArray = new Array();
配列リテラル表記とは何ですか?代わりにそれを使用する必要があるのはなぜですか?
ここに、new Array();
正常に動作するはずのことが示されています...何か足りないものはありますか?
JSLintは私にこのエラーを与えています:
11行目の33文字目の問題:配列リテラル表記[]を使用します。
var myArray = new Array();
配列リテラル表記とは何ですか?代わりにそれを使用する必要があるのはなぜですか?
ここに、new Array();
正常に動作するはずのことが示されています...何か足りないものはありますか?
配列リテラル表記は、空の角かっこだけを使用して新しい配列を定義する場所です。あなたの例では:
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
参照: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にも必要ありません)
したがって、プログラミングで一般的なパラダイムを再利用することで、必要のないことを再学習する必要がなくなります。
Crockfordの議論は別として、jsPerfはそれがより速いと言っています。http://jsperf.com/new-vs-literal-array-declaration
@ecMode jsperfを見た後、さらにいくつかのテストを行いました。
プッシュを使用して配列に追加する場合、Chromeでは新しいArray()がかなり高速になります。
http://jsperf.com/new-vs-literal-array-declaration/2
[]の場合、インデックスを使用して追加する方が少し高速です。