WeakMap va WeakSet
Biz bilamizki, JavaScriptda qiymatlar xotirada "erishish mumkin" bo'lgan vaqtgacha saqlanadi va ular foydalanilishi mumkin.
Masalan:
Odatda, ob'ektning xususiyatlari yoki massiv elementlari yoki boshqa ma'lumotlar tuzilmalari mavjud ekan, xotirada saqlanadi.
Masalan, agar biz ob'ektni massivga qo'ysak, massiv mavjud ekan, ob'ekt ham xotirada saqlanadi, hatto boshqa hech qanday murojaatlar bo'lmasa ham:
Huddi shunday, agar biz oddiy Map’da ob'ektni kalit sifatida ishlatsak, Map mavjud ekan, ob'ekt ham mavjud bo'ladi. U xotirani egallab turadi va garbage-collect qilinmaydi.
Masalan:
WeakMap bu holatda tubdan boshqacha ishlaydi. U kalit ob'ektlarning garbage-collect qilinishiga to'sqinlik qilmaydi.
WeakMap
WeakMap bilan Map o'rtasidagi birinchi farq shundaki, WeakMap’da kalitlar faqat ob'ektlar bo'lishi mumkin, primitiv qiymatlar emas:
Endi, agar biz ob'ektni kalit sifatida ishlatadigan bo'lsak va boshqa murojaatlar bo'lmasa, u xotiradan avtomatik ravishda o'chiriladi (va Map’dan ham).
Oddiy Map bilan taqqoslanganda, WeakMap’da agar ob'ekt faqat kalit sifatida mavjud bo'lsa, u avtomatik ravishda xotiradan (va WeakMap’dan) o'chiriladi.
WeakMap iteratsiyani qo'llab-quvvatlamaydi va keys()
, values()
, entries()
kabi metodlarga ega emas, shuning uchun undan barcha kalitlar yoki qiymatlarni olishning iloji yo'q.
WeakMap faqat quyidagi metodlarga ega:
weakMap.set(key, value)
weakMap.get(key)
weakMap.delete(key)
weakMap.has(key)
Ishlatish holati: qo'shimcha ma'lumotlar
WeakMap asosan qo'shimcha ma'lumotlarni saqlash uchun ishlatiladi. Agar biz uchinchi tomon kutubxonasiga tegishli ob'ekt bilan ishlayotgan bo'lsak va unga bog'liq ma'lumotlarni saqlamoqchi bo'lsak, ammo bu ma'lumot faqat ob'ekt mavjud ekan saqlanishi kerak bo'lsa, unda WeakMap aynan kerakli yechimdir.
WeakSet
WeakSet ham xuddi shunday ishlaydi:
- U Set ga o'xshaydi, ammo faqat ob'ektlarni qo'shish mumkin (primitiv qiymatlarni emas).
- Ob'ekt boshqa joydan erishib bo'ladigan bo'lsa, u WeakSet ichida saqlanadi.
- WeakSet’da
add
,has
,delete
metodlari bor, ammosize
,keys()
yoki iteratsiyalar yo'q.
Masalan, foydalanuvchilarni kuzatib borish uchun WeakSet ishlatish mumkin:
Xulosa
- WeakMap - bu Map ga o'xshash tuzilma bo'lib, u faqat ob'ektlarni kalit sifatida ishlatadi va ular boshqa yo'llar bilan erishib bo'lmasa, qiymatlar bilan birga avtomatik ravishda xotiradan o'chiriladi.
- WeakSet - bu Set ga o'xshash tuzilma bo'lib, faqat ob'ektlarni saqlaydi va ular boshqa yo'llar bilan erishib bo'lmasa, avtomatik ravishda xotiradan o'chiriladi.
Bu tuzilmalar ob'ektlarni boshqarish bilan bog'liq bo'lgan qo'shimcha ma'lumotlarni saqlash uchun ishlatiladi va ob'ektlar asosiy saqlashdan o'chirilganidan keyin avtomatik ravishda tozalanadi.