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'
Այսպիսով, արդյունքում ստացվում է '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'