JavaScript-da for-in siklida massivni aylantirishda xatolik
Massivni aylantirish uchun
for-of siklidan foydalanish kerak.
Biroq, ba'zida yangi boshlanuvchilar
for-in siklini qo'llashga urinishadi.
Keling, ushbu xatoning xarakterli belgilarini
ko'rib chiqaylik.
Bizda quyidagi massiv bor:
let arr = ['a', 'b', 'c'];
Keling, ushbu massiv elementlarini aylantirib, ularni bitta satrga yozamiz.
Ma'lum bir dasturchi bu vazifani hal qilgan,
lekin xatolik bilan for-in siklidan foydalangan.
Keling, uning natijasini ko'rib chiqaylik:
let res = '';
for (let elem in arr) {
res += elem;
}
console.log(res); // '012' ni chiqaradi
Shunday qilib, natijada 'abc' emas,
balki '012' satri hosil bo'ladi.
Keling, nima uchun shunday bo'lganini
tushunishga harakat qilaylik.
Nima uchun massiv umuman
for-in siklida aylanadi?
Gap shundaki, JavaScript-da massiv
obyektning alohida holatidir.
Shuning uchun aslida bu nuqtai nazardan
bu to'g'ri kod. Ammo buni qilish kerak emas.
Gap shundaki, for-in
ba'zi sharoitlarda ortiqcha narsalarni qo'shib yuborishi mumkin,
va siz massiv elementlaridan tashqari
aylantirish paytida boshqa parazit narsalarni olishingiz mumkin.
Massivlarni faqat for-of orqali aylantiring.
Keling, endi nima uchun biz shunday
g'alati natijani ko'rayotganimizni tushunamiz.
Gap shundaki, for-in orqali aylantirishda
elem o'zgaruvchisiga aslida
kalitlar tushadi, bu o'zgaruvchining nomi
chalg'itadigan bo'lsa ham.
Keling, qilingan xatoni tuzatamiz va to'g'ri kodni yozamiz:
let arr = ['a', 'b', 'c'];
let res = '';
for (let elem of arr) {
res += elem;
}
console.log(res); // 'abc' ni chiqaradi