7

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

4

3 に答える 3

5

forEach時々見栄えが良くなり、中間変数と閉鎖の問題を回避できます。

forより高速で、非配列で動作しthis、デフォルトで維持され、常に JavaScript の一部でした。break;ネストされていても、それから抜け出すことができます。

ES6 では、forEachthis導入により の維持と外観が改善されました=>forの冗長性と、場合によっては直感的でないスコープは、letandfor ofループによって改善されます。

6502 さんが回答したように、スパース配列では動作が異なります。
スパース配列は使用しないでください。

于 2013-09-12T20:34:52.657 に答える
1

これらは 2 つの非常に異なることを行います。

  1. for (var i=0; i<L.length; i++) { ... }「未定義」の配列要素を含むすべてのインデックスを反復処理します。
  2. 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 の要素用です。

于 2013-09-12T20:39:37.223 に答える
0

Array.prototype.forEach()ポリフィル/シムを使用して古いブラウザーにプロトタイプ機能を提供することを計画している場合は注意してください (InternetExplorer のことを考えています) 。

たとえば、このtoString()メソッドは古いバージョンの IE の配列では使用できません。toString()アプリケーションが古いブラウザーで動作するように、メソッドをArray.prototype に追加するポリフィルがあります。ただし、.forEach()イテレータを使用して反復すると、配列の内容を反復するだけでなく、そのメソッドにアクセスすることもできます (実際に反復します)。

ただし、一般的にforははるかに高速です。ただし、ループしたいJSONオブジェクトがある場合は、天のforEach恵みです。

于 2013-09-12T20:39:26.417 に答える