JavaScript'te for-in Döngüsü ile Dizi İterasyonu Hatası
Bir diziyi iterasyon için
for-of döngüsü
kullanılmalıdır.
Bununla birlikte, bazen yeni başlayanlar yanlışlıkla
for-in döngüsünü kullanmaya çalışır.
Bu hatanın karakteristik belirtilerine
bir göz atalım.
Bir dizimiz olduğunu varsayalım:
let arr = ['a', 'b', 'c'];
Bu dizinin elemanlarını tek tek dolaşalım ve onları tek bir satıra yazalım.
Bir programcı bu sorunu zaten çözmüş,
ama yanlışlıkla
for-in döngüsünü kullanmış.
Bakalım ne elde etmiş:
let res = '';
for (let elem in arr) {
res += elem;
}
console.log(res); // '012' yazacak
Sonuç olarak, 'abc' değil,
'012' dizisi elde ediliyor.
Neden böyle olduğunu anlamaya çalışalım.
Neden dizi zaten
for-in döngüsü ile dolaşılabiliyor?
Sebebi şu: JavaScript'te dizi, nesnenin özel
bir durumudur. Bu yüzden aslında
bu açıdan bakıldığında bu geçerli bir koddur. Ama böyle yapılmamalıdır.
Sebebi şu: for-in döngüsü
bazı koşullarda fazladan şeylere takılabilir,
ve dizi elemanlarına ek olarak
iterasyon sırasında başka istenmeyen bir şeyler de elde edebilirsiniz.
Dizileri sadece for-of ile dolaşın.
Şimdi neden böyle garip bir sonuç gördüğümüzü anlayalım. Sebep şu,
for-in ile dolaşırken
elem değişkenine aslında
anahtarların (keys) gelmesidir, bu değişkenin adının kafa karıştırıcı olmasına rağmen.
Şimdi yapılan hatayı düzeltelim ve doğru kodu yazalım:
let arr = ['a', 'b', 'c'];
let res = '';
for (let elem of arr) {
res += elem;
}
console.log(res); // 'abc' yazacak