JavaScript WeakMap
WeakMap — bu kalit-qiymat (key-value) juftliklaridan iborat to'plam bo'lib, unda kalitlar faqat obyektlar bo'lishi shart.
1. WeakMap qanday ishlaydi?
WeakMap o'z kalitlariga "kuchsiz havola" (weak reference) saqlaydi. Bu shuni anglatadiki, agar dasturda o'sha obyekt-kalitga boshqa hech qanday havola qolmasa, u JavaScript-ning xotira tozalagichi (Garbage Collector) tomonidan o'chirib yuborilishi mumkin. Obyekt xotiradan o'chirilishi bilan unga tegishli bo'lgan kalit-qiymat juftligi WeakMap dan ham avtomatik o'chib ketadi.
Misol
let meningMapim = new WeakMap();
let foydalanuvchi = { ism: "John" };
// Qiymat berish
meningMapim.set(foydalanuvchi, "maxfiy ma'lumot");
// Qiymatni olish
console.log(meningMapim.get(foydalanuvchi)); // "maxfiy ma'lumot"2. Asosiy farqlar (Map vs WeakMap)
| Xususiyat | Map | WeakMap |
|---|---|---|
| Kalit turlari | Istalgan tur (raqam, matn, obyekt) | Faqat obyektlar |
| Xotira boshqaruvi | Kalitlar xotirada qoladi | Takrorlanmagan kalitlar o'chib ketadi |
| Iteratsiya | forEach, keys(), values() ishlaydi | Iteratsiya qilib bo'lmaydi |
| Hajmi | size xususiyati bor | size xususiyati yo'q |
3. Metodlar
WeakMap faqat ma'lum bir obyekt-kalit bilan ishlashga mo'ljallangan va cheklangan metodlarga ega:
set(kalit, qiymat): Kalitga mos qiymatni saqlaydi.get(kalit): Kalitga mos qiymatni qaytaradi.has(kalit): Kalit borligini tekshiradi (true/false).delete(kalit): Kalit va uning qiymatini o'chiradi.
4. Qachon ishlatiladi?
Obyektlarni kuzatish (Tracking)
Obyektlar haqida qo'shimcha ma'lumotlarni saqlash uchun qulay. Masalan, foydalanuvchi sahifaga necha marta kirganini hisoblamoqchisiz, lekin foydalanuvchi obyekti o'chib ketganda bu ma'lumot ham xotirani band qilmasligi kerak:
const tashriflar = new WeakMap();
function yangiTashrif(foydalanuvchi) {
let soni = tashriflar.get(foydalanuvchi) || 0;
tashriflar.set(foydalanuvchi, soni + 1);
}Maxfiy ma'lumotlar (Privacy)
Ilgari, JavaScript-da klasslarning ichki (private) xususiyatlarini yashirish uchun WeakMap dan foydalanilgan. Tashqi kod WeakMap ichini ko'ra olmaydi (chunki u iterable emas).
Xulosa
WeakMap — bu xotira tejamkorligi va xavfsizlik uchun mo'ljallangan maxsus vosita. Agar sizga kalit sifatida obyektlar kerak bo'lsa va ularning butun dastur davomida xotirani band qilib turishini xohlamasangiz, WeakMap ideal tanlovdir.
