Najbardziej istotna różnica między for
pętlą a forEach
metodą polega na tym, że w przypadku tej pierwszej możesz break
wyjść z pętli. Możesz symulować continue
, po prostu wracając z funkcji przekazanej do forEach
, ale nie ma sposobu, aby całkowicie zatrzymać pętlę.
Poza tym oba te rozwiązania skutecznie realizują tę samą funkcjonalność. Inna niewielka różnica dotyczy zakresu indeksu (i wszystkich zawierających zmienne) w pętli for, ze względu na zmienne podnoszenie.
for (var i = 0; i < arr.length; i++) { ... }
arr.forEach(function (el, i) { ... });
Jednak forEach
wydaje mi się, że jest to dużo bardziej wyraziste - reprezentuje zamiar iteracji przez każdy element tablicy i zapewnia odniesienie do elementu, a nie tylko do indeksu. Ogólnie rzecz biorąc, sprowadza się to głównie do osobistego gustu, ale jeśli możesz go użyć forEach
, polecam go.
Pomiędzy tymi dwiema wersjami występuje kilka bardziej istotnych różnic, w szczególności dotyczących wydajności. W rzeczywistości prosta pętla for działa znacznie lepiej niż forEach
metoda, co wykazano w tym teście jsperf .
To, czy takie wykonanie jest dla Ciebie konieczne, zależy od Ciebie, aw większości przypadków wolałbym wyrazistość niż szybkość. Ta różnica szybkości jest prawdopodobnie spowodowana niewielkimi różnicami semantycznymi między podstawową pętlą a metodą podczas pracy na rzadkich tablicach, jak wspomniano w tej odpowiedzi .
Jeśli nie potrzebujesz zachowania forEach
i / lub musisz wcześnie wyrwać się z pętli, możesz użyć Lo-Dash _.each
jako alternatywy, która będzie działać również w różnych przeglądarkach. Jeśli używasz jQuery, zapewnia on również podobny $.each
, po prostu zwróć uwagę na różnice w argumentach przekazywanych do funkcji zwrotnej w każdej wariacji.
(Jeśli chodzi o forEach
polyfill, powinien działać w starszych przeglądarkach bez problemów, jeśli wybierzesz tę trasę.)
break
wyjśćforEach
. Ale dużą zaletą jest utworzenie nowego zakresu z funkcją. Z polyfillem nie powinieneś mieć żadnych problemów (przynajmniej ja żadnych nie spotkałem).