Fejl ved gennemløb af array med for-in loop i JavaScript
Til at gennemløbe et array bør du
bruge et for-of loop.
Nogle gange forsøger begyndere dog fejlagtigt
at anvende et for-in loop.
Lad os se på de karakteristiske kendetegn
for denne fejl.
Lad os sige, at vi har et array:
let arr = ['a', 'b', 'c'];
Lad os gennemløbe elementerne i dette array og skrive dem til en enkelt streng.
En eller anden programmør har allerede løst denne opgave,
men har fejlagtigt brugt et
for-in loop. Lad os se,
hvad der blev opnået:
let res = '';
for (let elem in arr) {
res += elem;
}
console.log(res); // vil udskrive '012'
Så resultatet bliver strengen '012',
og ikke 'abc'. Lad os finde ud af, hvorfor
det skete.
Hvorfor overhovedet blev arrayet gennemløbet
med et for-in loop? Sagtens, fordi
et array i JavaScript er et specialtilfælde
af et objekt. Så derfor er det faktisk
korrekt kode på dette punkt. Men det bør man ikke gøre.
Sagen er, at for-in
under visse betingelser kan fange
ekstra ting, og ud over arrayets elementer
får du måske noget andet parasitisk under gennemløbet.
Gennemløb arrays kun med for-of.
Lad os nu finde ud af, hvorfor vi ser
et så underligt resultat. Sagtens,
for når man gennemløber med for-in
vil der faktisk i variablen elem
komme nøgler, på trods af den forvirrende
navngivning af denne variabel.
Lad os rette den begåede fejl og skrive den korrekte kode:
let arr = ['a', 'b', 'c'];
let res = '';
for (let elem of arr) {
res += elem;
}
console.log(res); // vil udskrive 'abc'