Massivsimon obyektlar

Ko'rib o'tganimizdek, JavaScript massivlari boshqa obyektlarda mavjud bo'lmagan ba'zi o'ziga xos xususiyatlarga ega:

  • Ro'yxatga yangi elementlar qo'shilishi bilan length xossasi avtomatik ravishda yangilanib boradi.
  • length'ni kichikroq qiymatga o'rnatish massivni kesadi (truncate).
  • Massivlar Array.prototype'dan foydali metodlarni meros qilib oladi.
  • Array.isArray() massivlar uchun true qaytaradi.

Aynan shu xususiyatlar JavaScript massivlarini oddiy obyektlardan ajratib turadi. Lekin bular massivning mohiyatini belgilaydigan asosiy xususiyatlar emas. Sonli length xossasiga va unga mos keladigan manfiy bo'lmagan butun sonli xossalarga ega bo'lgan har qanday obyektga bir turdagi massiv sifatida qarash ko'pincha juda o'rinlidir.

Bu "massivsimon" (array-like) obyektlar aslida amalda vaqti-vaqti bilan uchrab turadi va garchi siz ularda massiv metodlarini to'g'ridan-to'g'ri chaqira olmasangiz yoki length xossasidan alohida xatti-harakat kutmasangiz ham, baribir ular bo'ylab xuddi haqiqiy massiv uchun ishlatadigan kodingiz yordamida iteratsiya qilishingiz mumkin. Ma'lum bo'lishicha, ko'plab massiv algoritmlari haqiqiy massivlarda qanday ishlasa, massivsimon obyektlarda ham xuddi shunday yaxshi ishlaydi. Bu, ayniqsa, agar algoritmlaringiz massivni faqat o'qish uchun mo'ljallangan deb hisoblasa yoki hech bo'lmaganda massiv uzunligini o'zgarishsiz qoldirsa, to'g'ri keladi.

Quyidagi kod parchasi oddiy obyektni qanday qilib "massivsimon" obyektga aylantirish va so'ngra hosil bo'lgan psevdo-massivning "elementlari" bo'ylab iteratsiya qilish mumkinligini namoyish etadi:

Klient tomonidagi JavaScript'da HTML dokumentlari bilan ishlaydigan bir qator metodlar (masalan, document.querySelectorAll()) massivsimon obyektlarni qaytaradi. Quyida massiv kabi ishlaydigan obyektlarni tekshirish uchun foydalanish mumkin bo'lgan funksiya keltirilgan:

Keyingi bo'limda satrlar o'zini massivlardek tutishini ko'rib chiqamiz. Shunga qaramay, massivsimon obyektlar uchun bu kabi tekshiruvlar odatda satrlar uchun false qaytaradi — ular bilan massiv sifatida emas, balki satr sifatida ishlagan ma'qul.

Ko'plab JavaScript massiv metodlari ataylab universal (generic) qilib yaratilganki, ular nafaqat haqiqiy massivlarga, balki massivsimon obyektlarga qo'llanilganda ham to'g'ri ishlaydi. Massivsimon obyektlar Array.prototype'dan meros olmagani uchun, ularda massiv metodlarini to'g'ridan-to'g'ri chaqira olmaysiz. Biroq ularni Function.call metodi yordamida bilvosita chaqirish mumkin (§8.7.4-bo'limda batafsil yoritilgan):

Ushbu kodning oxiridan bitta oldingi qatori massivsimon obyektning elementlarini haqiqiy massiv obyektiga ko'chirish uchun o'sha obyektda Array.slice() metodini chaqiradi. Bu ko'plab eski kodlarda mavjud bo'lgan idiomatik usuldir, lekin hozir buni Array.from() yordamida ancha osonroq bajarish mumkin.