Chyba pri prechádzaní poľa cyklom for-in v JavaScripte
Na prechádzanie poľa by sa mal
použiť cyklus for-of.
Niekedy sa však začiatočníci mylne
pokúšajú použiť cyklus for-in.
Pozrime sa na charakteristické znaky
tejto chyby.
Majme pole:
let arr = ['a', 'b', 'c'];
Prejdime prvky tohto pola a zapíšme ich do jedného reťazca.
Nejaký programátor už túto úlohu vyriešil,
ale chybne použil cyklus
for-in. Pozrime sa,
čo mu vyšlo:
let res = '';
for (let elem in arr) {
res += elem;
}
console.log(res); // vypíše '012'
Takže, výsledkom je reťazec '012',
a nie 'abc'. Poďme zistiť, prečo
sa to stalo.
Prečo sa pole vôbec prešlo
cez cyklus for-in? Faktom je, že
pole v JavaScripte je špeciálnym
prípadom objektu. Preto je to v tomto
ohľade vlastne korektný kód. Ale takto sa to
robiť nemalo.
Problém je v tom, že for-in
za určitých podmienok môže zachytiť
niečo navyše, a tak okrem prvkov poľa
pri prechádzaní získate ešte niečo parazitné.
Prechádzajte polia iba pomocou for-of.
Poďme teraz zistiť, prečo vidíme
taký zvlášny výsledok. Faktom je,
že pri prechádzaní pomocou for-in
do premennej elem v skutočnosti
budú padať kľúče, napriek zavádzajúcemu názvu tejto
premennej.
Opravme urobenú chybu a napíšme korektný kód:
let arr = ['a', 'b', 'c'];
let res = '';
for (let elem of arr) {
res += elem;
}
console.log(res); // vypíše 'abc'