Napaka pri iteraciji skozi array z zanko for-in v JavaScript
Za iteracijo skozi array je treba
uporabiti zanko for-of.
Včasih pa začetniki pomotoma
poskušajo uporabiti zanko for-in.
Poglejmo si značilne znake
te napake.
Recimo, da imamo array:
let arr = ['a', 'b', 'c'];
Iterirajmo skozi elemente tega arrayja in jih zapišimo v eno vrstico.
Nek programer je to nalogo že rešil,
vendar je pomotoma uporabil zanko
for-in. Poglejmo,
kaj je dobil:
let res = '';
for (let elem in arr) {
res += elem;
}
console.log(res); // izpiše '012'
Torej, rezultat je niz '012',
in ne 'abc'. Poglejmo, zakaj
se je to zgodilo.
Zakaj se je array sploh dal iterirati
skozi zanko for-in? Bistvo je v tem, da je
array v JavaScriptu poseben
primer objekta. Zato je to pravzaprav
v tem smislu korektna koda. Toda tega ne bi smeli delati.
Bistvo je v tem, da for-in
lahko pod določenimi pogoji zajame
odvečne stvari, in boste poleg elementov arrayja
pri iteraciji dobili še kaj parazitskega.
Skozi arrayje iterirajte samo z for-of.
Zdaj pa poglejmo, zakaj vidimo
takšen čuden rezultat. Bistvo je v tem,
da pri iteraciji z for-in
v spremenljivko elem pravzaprav
prihajajo ključi, ne glede
na zavajajoče ime te
spremenljivke.
Popravimo storjeno napako in napišimo korektno kodo:
let arr = ['a', 'b', 'c'];
let res = '';
for (let elem of arr) {
res += elem;
}
console.log(res); // izpiše 'abc'