Kļūda, masīva apstaigāšanā ar for-in ciklu JavaScript
Masīva apstaigāšanai vajadzētu
izmantot ciklu for-of.
Dažreiz tomēr iesācēji kļūdaini
mēģina izmantot ciklu for-in.
Apskatīsim šīs kļūdas raksturīgās pazīmes.
Pieņemsim, ka mums ir masīvs:
let arr = ['a', 'b', 'c'];
Apstaigāsim šī masīva elementus un ierakstīsim tos vienā rindā.
Kāds programmētājs jau ir atrisinājis šo uzdevumu,
bet kļūdaini izmantojis ciklu
for-in. Apskatīsim,
kas viņam izdevās:
let res = '';
for (let elem in arr) {
res += elem;
}
console.log(res); // izvadīs '012'
Tātad, rezultātā tiek iegūta rinda '012',
nevis 'abc'. Padomāsim, kāpēc
tā notika.
Kāpēc vispār masīvs tika apstaigāts
ar ciklu for-in? Lieta ir tāda, ka
masīvs JavaScript ir īpašs
objekta gadījums. Tāpēc patiesībā
šajā ziņā tas ir korekts kods. Bet tā darīt
nevajadzētu.
Lieta ir tāda, ka for-in
noteiktos apstākļos var satvert
lieko, un jūs, papildus masīva elementiem,
apstaigājot iegūsit kaut ko papildus parazitāru.
Apstaigājiet masīvus tikai ar for-of.
Tagad padomāsim, kāpēc mēs redzam
tādu dīvainu rezultātu. Lieta ir tāda,
ka, apstaigājot ar for-in,
mainīgajā elem patiesībā
nokļūs atslēgas, neskatoties
uz maldinošo šī mainīgā nosaukumu.
Izlabosim pieļauto kļūdu un uzrakstīsim korektu kodu:
let arr = ['a', 'b', 'c'];
let res = '';
for (let elem of arr) {
res += elem;
}
console.log(res); // izvadīs 'abc'