JavascriptでArray.prototype.forEach()とfor()を使用して配列を反復することの長所/短所は何ですか?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
JavascriptでArray.prototype.forEach()とfor()を使用して配列を反復することの長所/短所は何ですか?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
forEach
時々見栄えが良くなり、中間変数と閉鎖の問題を回避できます。
for
より高速で、非配列で動作しthis
、デフォルトで維持され、常に JavaScript の一部でした。break;
ネストされていても、それから抜け出すことができます。
ES6 では、forEach
のthis
導入により の維持と外観が改善されました=>
。for
の冗長性と、場合によっては直感的でないスコープは、let
andfor of
ループによって改善されます。
6502 さんが回答したように、スパース配列では動作が異なります。
スパース配列は使用しないでください。
これらは 2 つの非常に異なることを行います。
for (var i=0; i<L.length; i++) { ... }
「未定義」の配列要素を含むすべてのインデックスを反復処理します。forEach
定義された要素のみを繰り返します。また、「未定義」であることは、単に要素の値が であることundefined
を意味するのではなく、要素が決して設定されておらず、2 つは非常に異なるものであることにも注意してください。
a = [];
a[3] = 9;
a.indexOf(undefined) // --> -1
a[1] = undefined;
a.indexOf(undefined) // --> 1
そのため、値を持つ定義済みの要素を持つことができますundefined
...
a = [];
a[9] = 9;
a[3] = undefined;
a.forEach(function(){ console.log(arguments); });
2 つの行が表示されます。1 つはインデックス 9 の要素用で、もう 1 つはインデックス 3 の要素用です。
Array.prototype.forEach()
ポリフィル/シムを使用して古いブラウザーにプロトタイプ機能を提供することを計画している場合は注意してください (InternetExplorer のことを考えています) 。
たとえば、このtoString()
メソッドは古いバージョンの IE の配列では使用できません。toString()
アプリケーションが古いブラウザーで動作するように、メソッドをArray.prototype に追加するポリフィルがあります。ただし、.forEach()
イテレータを使用して反復すると、配列の内容を反復するだけでなく、そのメソッドにアクセスすることもできます (実際に反復します)。
ただし、一般的にfor
ははるかに高速です。ただし、ループしたいJSONオブジェクトがある場合は、天のforEach
恵みです。