Памылка перабору масіву цыклам 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'