私は疑問に思っています:JavaScriptのforEach
ループとfor
ループの間に大きな違いはありますか?.
この例を考えてみましょう:
var myArray = [1,2,3,4];
myArray.forEach(function(value) {
console.log(value);
});
for (var i = 0; i < myArray.length; i++) {
console.log(myArray[i]);
}
これが私の研究の一部です:
例:数値が素数かどうかを調べたいとします。 forEachループを使用するよりもforループを使用する方がはるかに簡単だと思います。
私の質問は:
forEach
は Array
プロトタイプのメソッドです。配列の各要素を反復処理し、それをコールバック関数に渡します。
つまり、基本的に、 forEach
は、ユースケース "array
の各要素をfunction
に渡す"の省略形です。これが私が思う一般的な例です Array.forEach
は、for
ループと比較して非常に便利です。
// shortcut for document.querySelectorAll
function $$(expr, con) {
return Array.prototype.slice.call((con || document).querySelectorAll(expr));
}
// hide an element
function hide(el) {
el.style.display = 'none';
}
// hide all divs via forEach
$$('div').forEach(hide);
// hide all divs via for
for (var divs = $$('div'), i = 0; i < divs.length; i++) {
hide(divs[i])
}
ご覧のとおり、forEachステートメントの可読性は、for
ループに比べて向上しています。
一方、for
ステートメントの方が柔軟性があります。必ずしも配列が含まれるとは限りません。通常のfor
ループのパフォーマンスは、関係する各要素の関数呼び出しがないため、わずかに優れています。これにもかかわらず、for
ステートメントとして記述できる場合は、forEach
ループを回避することをお勧めします。
forEach
ループでは、配列を反復する方法を制御しません。従来のfor
ループでは、必要に応じて反復アルゴリズムを選択できます(i++
; i--
; i+=2*i
など)。
ただし、forEach
ループの方がはるかに使いやすいです。i
カウントをすべて処理してarray[i]
オブジェクトを見つける必要はありません。JSがそれを行います。
>> sparseArray = [1, 2, , 4];
>> sparseArray.forEach(console.log, console);
1 0 [1, 2, 3: 4]
2 1 [1, 2, 3: 4]
4 3 [1, 2, 3: 4]
>> for(var i = 0; i < sparseArray.length; ++i) { console.log(sparseArray[i]) };
1
2
undefined
4
forEach
は、JavaScriptで表現力豊かなリスト理解スタイルを可能にする最近の追加です。ここではforEach
設定されていない要素をスキップするであることがわかりますが、for
ループでできる最善の方法はundefined
を確認することですまたはnull
。どちらも値として設定でき、forEach
で取得できます。欠損値が予想されない限り、forEach
はfor
ループと同等ですが、every
が必要な早期停止はできないことに注意してください。
簡単に言えば、以下の記事と調査によると、主な違いは次のようです:
Forループ
break
することができます(iterator, counter, incrementor)
ですForEachループ
i <= >= etc.....
を使用すると、偶発的なエラーの可能性が低くなります(iterator, Index of item, entire array)
です