私が読んだJavaScriptの配列に関するチュートリアルのほとんど(w3学校そしてデヴグル) は、構文を使用して Array コンストラクターに整数を渡すことで、特定の長さの配列を初期化できることを示唆していますvar test = new Array(4);
。
この構文をjsファイルで多用した後、ファイルの1つをjsLint、そしてそれはパニックになりました:
エラー: 1 行目の 22 文字目に問題があります: ')' が期待されましたが、代わりに '4' が表示されました。var
test = new Array(4);
1 行目の 23 文字目に問題があります: ';' が期待されましたが、代わりに ')' が表示されました。var
test = new Array(4);
1 行目の 23 文字目に問題があります: 識別子が期待されましたが、代わりに ')' が表示されました。
読み終えた後jsLint の動作の説明jsLint は構文をあまり好まないようでnew Array()
、代わりに[]
配列を宣言するときに好むようです。
そこでいくつか質問があります。
まず、なぜでしょうか? 代わりに構文を使用すると、リスクはありますかnew Array()
? 注意すべきブラウザの非互換性はありますか?
次に、角括弧構文に切り替えた場合、配列を宣言してその長さをすべて 1 行で設定する方法はありますか。それとも、次のようにする必要がありますか。
var test = [];
test.length = 4;
ベストアンサー1
Array(5)
長さ 5 の配列が生成されますが、値が含まれていないため、反復処理はできません。Array.apply(null, Array(5)).map(function () {})
長さ 5 で値が undefined の配列が生成され、反復処理が可能になります。Array.apply(null, Array(5)).map(function (x, i) { return i; })
長さ 5、値 0、1、2、3、4 の配列が生成されます。Array(5).forEach(alert)
何もせず、Array.apply(null, Array(5)).forEach(alert)
5つのアラートを表示しますES6
私たちに与えてくれるArray.from
ので、今ではあなたも使うことができますArray.from(Array(5)).forEach(alert)
特定の値で初期化したい場合は、これらを知っておくと便利です...
Array.from('abcde')
、Array.from('x'.repeat(5))
またはArray.from({length: 5}, (v, i) => i) // gives [0, 1, 2, 3, 4]