Coba kamu disuruh print "Halo" 1000 kali. Nulis manual console.log("Halo") 1000 kali? Gila. Solusi: loop — perintah komputer "ulangi blok kode ini sampai kondisi terpenuhi." Jadi 4 baris kode aja yang ngerjain 1000 iterasi. Loop adalah salah satu hal paling powerful dalam programming — semua yang berulang (filter list, kirim email ke 100 user, kalkulasi total cart) dasarnya loop.
🤔 Hati-hati infinite loop. Lupa update counter di
whileloop = loop jalan selamanya = browser freeze.while (i < 5) { console.log(i); }(tanpai++) bakal hang halaman. Tip safety: tulis kondisi berhenti DULU sebelum loop body — paksa otak mikirin "kapan loop ini stop?".
For loop:
for (let i = 0; i < 5; i++) {
console.log(i);
}
While loop:
let i = 0;
while (i < 5) {
console.log(i);
i++;
}
Gunakan for jika kamu tahu berapa kali ingin mengulang. Gunakan while jika tergantung kondisi.
🎭 Analogi sehari-hari
Loop = robot pelipat baju di laundry:
for= "lipat 100 baju" (jumlah pasti).while= "lipat sampai keranjang kosong" (jumlah tidak pasti).for...of= "ambil satu-satu dari keranjang lalu lipat".
Robot tidak capek — mau 100 atau 10.000 baju, dia jalan tanpa keluhan, asal kondisi berhenti jelas.
⚠️ Jebakan yang sering ditemui
- Off-by-one error paling sering.
for (let i = 0; i < n; i++)jalannkali (0..n-1).i <= njalann+1kali. - Infinite loop kalau lupa update counter.
while (i < 5) { console.log(i); }(tidak adai++) bikin browser hang. - Modifikasi array saat iterasi = bug subtle.
for (let i = 0; i < arr.length; i++) arr.splice(i, 1)skip elemen. for...inuntuk OBJECT,for...ofuntuk ARRAY/iterable.for...indi array kasih INDEX (string!), bukan value.break&continue—breakkeluar total,continueskip iterasi ini lanjut iterasi berikutnya. Sering ketukar.- Loop di array besar = block UI — JS single-thread. 1 juta iterasi sync = halaman freeze. Pecah pakai
setTimeoutchunks atau Web Worker.
🎯
forvsfor...ofvsforEachvswhile— pilih yang mana?
- Iterasi array dengan butuh INDEX →
for (let i = 0; i < arr.length; i++)atauarr.forEach((item, i) => ...)- Iterasi array biasa, gak butuh index →
for (const item of arr)(clean) atauarr.forEach- Mau pakai
break/continue→for...ofataufor(forEach gak support)- Iterasi keys object →
for (const key in obj)atauObject.keys(obj).forEach(...)- Loop sampai kondisi tertentu (cari sesuatu) →
whileataufor+break- Transform/filter array →
arr.map/arr.filter/arr.reduce(BUKAN loop manual)Aturan modern:
for...ofclean buat iterasi sederhana.forEachcocok pas chain dari array methods.forclassic kalau butuh index control.whilejarang dipakai kecuali kondisi non-counter (e.g., parser).
TL;DR: Loop = ulangi blok kode. for (counter klasik), for...of (iterasi array/iterable, clean), for...in (iterasi keys OBJECT — di array kasih index string), while (kondisi non-counter), forEach (chain method). break keluar total, continue skip iterasi ini. Lupa update counter di while = infinite loop = browser freeze. Untuk transform array, pakai map/filter/reduce BUKAN loop manual. Loop di array besar = block UI (single-thread).