Грешка при итерација на низа со 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'