Perbedaan paling mendasar antara for
loop dan forEach
metode adalah, dengan metode sebelumnya, Anda mungkin break
keluar dari loop. Anda dapat melakukan simulasi continue
hanya dengan kembali dari fungsi yang diteruskan ke forEach
, tetapi tidak ada cara untuk menghentikan perulangan sama sekali.
Selain itu, keduanya mencapai fungsi yang sama secara efektif. Perbedaan kecil lainnya melibatkan cakupan indeks (dan semua variabel yang mengandung) di loop for, karena pengangkatan variabel.
for (var i = 0; i < arr.length; i++) { ... }
arr.forEach(function (el, i) { ... });
Namun, menurut saya itu forEach
jauh lebih ekspresif — ini mewakili niat Anda untuk mengulang melalui setiap elemen array, dan ini memberi Anda referensi ke elemen, bukan hanya indeks. Secara keseluruhan, sebagian besar tergantung pada selera pribadi, tetapi jika Anda dapat menggunakannya forEach
, saya akan merekomendasikan untuk menggunakannya.
Ada beberapa perbedaan substansial antara kedua versi tersebut, khususnya terkait kinerja. Nyatanya, loop for yang sederhana bekerja jauh lebih baik daripada forEach
metode, seperti yang ditunjukkan oleh pengujian jsperf ini .
Apakah penampilan seperti itu diperlukan bagi Anda atau tidak, terserah Anda untuk memutuskan, dan dalam banyak kasus, saya lebih menyukai ekspresi daripada kecepatan. Perbedaan kecepatan ini kemungkinan besar disebabkan oleh perbedaan semantik kecil antara loop dasar dan metode saat beroperasi pada array renggang, seperti yang dijelaskan dalam jawaban ini .
Jika Anda tidak membutuhkan perilaku forEach
dan / atau Anda perlu keluar dari loop lebih awal, Anda dapat menggunakan Lo-Dash _.each
sebagai alternatif, yang juga akan bekerja lintas browser. Jika Anda menggunakan jQuery, ini juga menyediakan yang serupa $.each
, cukup perhatikan perbedaan dalam argumen yang diteruskan ke fungsi callback di setiap variasi.
(Sedangkan untuk forEach
polyfill, ini harus bekerja di browser lama tanpa masalah, jika Anda memilih untuk pergi ke rute itu.)
break
keluarforEach
. Tetapi keuntungan besar adalah membuat ruang lingkup baru dengan fungsi tersebut. Dengan polyfill Anda seharusnya tidak mengalami masalah (setidaknya saya belum menemui masalah).