A tömb bejárásának hibája for-in ciklussal JavaScriptben
A tömb bejárásához a
for-of ciklust kell
használni.
Azonban néha a kezdők tévesen
a for-in ciklust próbálják alkalmazni.
Nézzük meg ennek a hibának a jellemző jeleit.
Tegyük fel, hogy van egy tömbünk:
let arr = ['a', 'b', 'c'];
Járjuk be a tömb elemeit és írjuk őket egyetlen sztringbe.
Egy bizonyos programozó már megoldotta ezt a feladatot,
de tévesen a for-in
ciklust használta. Nézzük meg,
mit kapott:
let res = '';
for (let elem in arr) {
res += elem;
}
console.log(res); // kiírja '012'
Tehát az eredmény a '012' sztring,
és nem a 'abc'. Derítsük ki, miért
történt ez.
Egyáltalán miért is lehet a tömböt
for-in ciklussal bejárni? Az az oka, hogy
a tömb a JavaScriptben az objektum
különleges esete. Ezért valójában
ez tekintetben ez helyes kód. De nem szabad
így csinálni.
Az a helyzet, hogy a for-in
bizonyos feltételek mellett felesleges dolgokat is beérinthet,
így a tömb elemei mellett
még valami nemkívánatosat is kaphatsz a bejárás során.
A tömböket csak for-of ciklussal szabad bejárni.
Most nézzük meg, miért látunk
ilyen furcsa eredményt. Az a helyzet,
hogy a for-in-nel való bejárás során
valójában a elem változóba
a kulcsok kerülnek, függetlenül
a változó nevének félrevezető voltától.
Most javítsuk ki az elkövetett hibát és írjunk helyes kódot:
let arr = ['a', 'b', 'c'];
let res = '';
for (let elem of arr) {
res += elem;
}
console.log(res); // kiírja 'abc'