Хатоги гузаронидани массив бо ҳалқаи 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'-ро мебарорад