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'