JavaScript WeakSet
WeakSet — bu faqat obyektlardan iborat bo'lgan to'plamdir. Oddiy Set dan farqli o'laroq, u o'z ichiga raqam yoki matn kabi oddiy qiymatlarni (primitive) ololmaydi.
1. WeakSet qanday ishlaydi?
WeakSet obyektlarga "kuchsiz havola" (weak reference) saqlaydi. Bu shuni anglatadiki, agar dasturda o'sha obyektga boshqa hech qanday havola qolmasa, u JavaScript-ning xotira tozalagichi (Garbage Collector) tomonidan o'chirib yuborilishi mumkin. Obyekt xotiradan o'chirilishi bilan u avtomatik ravishdag WeakSet dan ham yo'qoladi.
Misol
// WeakSet yaratish
let meningSetim = new WeakSet();
// Obyekt yaratish
let odam = { ism: "Ali", yosh: 25 };
// Obyektni qo'shish
meningSetim.add(odam);
// Tekshirish
console.log(meningSetim.has(odam)); // true2. Asosiy farqlar (Set vs WeakSet)
| Xususiyat | Set | WeakSet |
|---|---|---|
| Qiymat turlari | Har qanday tur (raqam, matn, obyekt va h.k.) | Faqat obyektlar |
| Xotira (Garbage Collection) | Elementlar xotirada qoladi (to'plamda borligi uchun) | Elementlar xotiradan o'chib ketishi mumkin |
| Iteratsiya | forEach, for..of ishlaydi | Iteratsiya qilib bo'lmaydi |
| Hajmi | size xususiyati mavjud | size xususiyati yo'q |
3. Metodlar
WeakSet juda cheklangan metodlarga ega:
add(obyekt): Yangi obyekt qo'shadi.has(obyekt): Obyekt borligini tekshiradi (true/false).delete(obyekt): Obyektni to'plamdan o'chiradi.
⚠️ E'tibor bering: Unda clear() metodi yoki takrorlash (loop) imkoniyati yo'q.
4. Qachon ishlatiladi?
WeakSet asosan obyektlarni "belgilab qo'yish" yoki ularni kuzatish (monitoring) uchun ishlatiladi. Masalan, biror obyekt bilan oldin ishlanganmi yoki yo'qligini tekshirishda qulay, chunki obyekt foydalanilmay qolganda, u xotirani band qilib turmaydi.
const tashrifBuyurganlar = new WeakSet();
function tashrifBuyurdi(mehmon) {
if (tashrifBuyurganlar.has(mehmon)) {
console.log(mehmon.ism + " yana keldi.");
} else {
tashrifBuyurganlar.add(mehmon);
console.log(mehmon.ism + " birinchi marta keldi.");
}
}Xulosa
WeakSet — bu xotira boshqaruvi (Memory Management) uchun mo'ljallangan maxsus to'plam turi. Agar sizga faqat obyektlar kerak bo'lsa va ularning xotiradan avtomatik o'chib ketishidan xavotir olmasangiz, WeakSet eng yaxshi tanlovdir.
