Грешка при обхождане на масив с цикъл for-in в JavaScript
За обхождане на масив трябва да се
използва цикъл for-of.
Понякога обаче начинаещи погрешно
се опитват да приложат цикъл for-in.
Нека да разгледаме характерните признаци
на тази грешка.
Да предположим, че имаме масив:
let arr = ['a', 'b', 'c'];
Нека да обходим елементите на този масив и да ги запишем в един низ.
Някой програмист вече е решил тази задача,
но погрешно е използвал цикъл
for-in. Нека да видим
какво е получил:
let res = '';
for (let elem in arr) {
res += elem;
}
console.log(res); // ще изведе '012'
И така, в резултат се получава низ '012',
а не 'abc'. Нека да разберем защо
се е случило това.
Защо изобщо масивът се обходи
чрез цикъл for-in? Работата е там, че
масивът в JavaScript е частен
случай на обект. Затова всъщност
в този смисъл това е коректен код. Но така не трябва да се прави.
Работата е там, че for-in
при определени условия може да улови
нещо допълнително, и вие освен елементите на масива
може да получите при обхождане нещо паразитно.
Обхождайте масиви само чрез for-of.
Нека сега да разберем защо виждаме
такъв странен резултат. Работата е там,
че при обхождане чрез for-in
в променливата elem всъщност
ще попадат ключовете, въпреки
подвеждащото име на тази
променлива.
Нека да поправим допуснатата грешка и да напишем коректен код:
let arr = ['a', 'b', 'c'];
let res = '';
for (let elem of arr) {
res += elem;
}
console.log(res); // ще изведе 'abc'