WeakSet în JavaScript

Map și Set ES2015 (ES6)

Un Set de obiecte care nu împiedică ștergerea lor din memorie; util pentru a „marca” obiecte.

Sintaxă
const ws = new WeakSet();
ws.add(obiect)
ws.has(obiect)
ws.delete(obiect)

Ce face WeakSet

WeakSet ține minte doar dacă un obiect a fost adăugat, fără să-l păstreze în memorie. Valorile trebuie să fie obiecte (sau simboluri nefolosite cu Symbol.for).

Ca la WeakMap, nu poate fi parcurs și nu are size. Are doar add, has și delete. Exemplu tipic: marcarea obiectelor deja procesate, fără să le ții în viață.

Parametri

Parametru Descriere
valori Opțional, la creare: un iterabil de obiecte.

Ce returnează

Un obiect WeakSet.

Exemple

Exemplul 1: Mesaje deja afișate

const afisate = new WeakSet();
const mesaje = [{ text: "Bun venit" }, { text: "Ai o comandă nouă" }];

function afiseaza(mesaj) {
  if (afisate.has(mesaj)) return;
  afisate.add(mesaj);
  console.log(mesaj.text);
}

afiseaza(mesaje[0]);
afiseaza(mesaje[0]);
afiseaza(mesaje[1]);
console.log(afisate.delete(mesaje[1]), afisate.has(mesaje[1]));

Rezultat

Bun venit
Ai o comandă nouă
true false

Greșeli frecvente

  • Încerci să afișezi conținutul unui WeakSet sau să-l parcurgi. Nu se poate; dacă ai nevoie de listă, folosește Set.

Comenzi înrudite

  • WeakMap: Un Map cu chei obiecte, care nu împiedică ștergerea obiectelor din memorie.
  • Set (add, has, delete): O colecție de valori unice: fiecare valoare apare o singură dată, în ordinea adăugării.
  • WeakRef / FinalizationRegistry: Referințe slabe la obiecte și notificări când un obiect a fost eliberat din memorie.