JavaScript да for-in цикли билан массивни қайталашдаги хатолик
Массивни қайталаш учун
for-of циклидан фойдаланиш керак.
Аммо, баъзан бошланувчилар хато қилиб
for-in циклини қўллашга ҳаракат қиладилар.
Келинг, бу хатолинг характерли белгиларини
кўриб чиқайлик.
Бизда массив мавжуд деб фараз қилайлик:
let arr = ['a', 'b', 'c'];
Келинг, бу массив элементларини қайталаб, уларни битта сатрга ёзайлик.
Бир дастурчи бу масалани аллоқачон ечган,
лекин хато қилиб for-in
циклидан фойдаланган. Келинг, унинг натижасини
кўриб чиқайлик:
let res = '';
for (let elem in arr) {
res += elem;
}
console.log(res); // '012' ни кўрсатади
Шунинг учун, натижада 'abc' эмас,
балки '012' сатри ҳосил бўлади.
Нега бундой бўлганини тушуниб кўрайлик.
Нега умуман массив for-in
цикли орқали қайталанди? Гapи шундаки,
JavaScript да массив объектнинг Maxcус
ҳолидир. Шу сабабли аслида бу жиҳатдан
бу дурус коддир. Лекин бундай қилиш керак эмас.
Гapи шундаки, for-in
айrim шартларда ортиқча элементларни ҳам қамраб олиши мумкин,
ва сиз массив элементлари билан биргатибa
қайталаш жараёнида яна қандайдир паразит нарсаларни олишингиз мумкин.
Массивларни фақат for-of орқали қайталанг.
Энди нега биз бундай гʻалати натижани кўриб турганимизни тушуниб кўрайлик.
Гapи шундаки, for-in орқали қайталашда
elem ўзгарувчисига аслида
калитлар түшади, ҳатто ўзгарувчининг номи
сизни адаштиришига қарамай.
Келинг, қилинган хатоликни түзатамиз ва дурус кодни ёзайлик:
let arr = ['a', 'b', 'c'];
let res = '';
for (let elem of arr) {
res += elem;
}
console.log(res); // 'abc' ни кўрсатади