CodeBlanks Logo Icon CodeBlanks

WeakMap ve WeakSet

JavaScript kursu · İleri seviye · Ders 39/100

WeakMap ve WeakSet'in çöp toplayıcı ile nasıl çalıştığını öğrenirsin.

WeakMap nedir?

WeakMap, anahtarları yalnızca nesne olabilen bir Map türüdür. Tutulan referans zayıftır: başka hiçbir yerde kullanılmayan bir nesne çöp toplayıcı tarafından temizlenir ve WeakMap'ten otomatik olarak düşer.

Bu özellik, bir nesneye ek bilgi eklemek istediğinde ama o nesne yok olunca verinin de yok olmasını istediğinde kullanışlıdır. WeakMap'in size özelliği ya da keys()/values() metotları yoktur; içerik listelenemez.

WeakSet ve kullanım

WeakSet, yalnızca nesneleri zayıf biçimde tutan bir Set türüdür. Bir nesne WeakSet'e add edilir; has ile varlığı, delete ile silinir. Yinelenen nesneler yoktur.

Tipik kullanım: bir nesnenin "işaretli" olduğunu izlemek. Örneğin bir DOM öğesinin zaten bir olay dinleyicisiyle kaydedilip kaydedilmediğini WeakSet ile takip edebilirsin; öğe kaldırılınca kayıt da otomatik temizlenir.

Uygulama WeakMap ile nesneye metadata ekle

meta adında bir WeakMap oluştur. btn adında bir nesne tanımla. meta.set(btn, ...) ile btn'e { seen: true } değerini ekle. meta.has(btn) sonucunu console.log ile yazdır.

Örnek çözümü göster
const meta = new WeakMap();
const btn = { name: "Ayşe" };
meta.set(btn, { seen: true });
console.log(meta.has(btn));

Kendini test et

  1. WeakMap anahtarları için hangisi geçerlidir?

    • Yalnızca dize anahtarlar
    • Sayı, dize ve nesne anahtarlar
    • Yalnızca nesne anahtarlar
    • Herhangi bir tür
    Cevabı göster

    Yalnızca nesne anahtarlar — Doğru. WeakMap anahtarları yalnızca nesne olabilir.

  2. WeakMap'e değer ekle

    const meta = new WeakMap();
    const btn = {};
    meta.____(btn, { count: 0 });
    console.log(meta.has(btn));
    Cevabı göster
    const meta = new WeakMap();
    const btn = {};
    meta.set(btn, { count: 0 });
    console.log(meta.has(btn));
  3. WeakMap ve WeakSet özellikleri

    WeakMap anahtarı
    Yalnızca nesne olabilir
    WeakSet öğesi
    Yalnızca nesne kabul eder
    size özelliği
    Bulunmaz, listelenemez
    çöp toplayıcı
    Otomatik temizler
  4. WeakMap ile ilgili hangisi doğrudur?

    • içerik listelenemez, anahtarlar nesne olur
    • size özelliği kaç giriş olduğunu verir
    • keys() ile tüm anahtarları listeler
    • içindeki girişler for...of ile gezilebilir
    Cevabı göster

    içerik listelenemez, anahtarlar nesne olur — Doğru. WeakMap iterable değildir; size veya keys() de yoktur.

İleri seviye bölümündeki tüm dersler