Ce face WeakMap
Într-un WeakMap, cheile trebuie să fie obiecte (sau simboluri nefolosite cu Symbol.for). Legătura cu cheia este „slabă”: dacă obiectul-cheie nu mai este folosit nicăieri altundeva, el și valoarea asociată pot fi eliberate automat din memorie.
Din acest motiv, un WeakMap nu poate fi parcurs și nu are size sau clear: are doar set, get, has și delete. Se folosește pentru date atașate unor obiecte pe care nu le controlezi (elemente DOM, obiecte primite din altă bibliotecă) și pentru cache.
Parametri
| Parametru | Descriere |
|---|---|
perechi |
Opțional, la creare: perechi [obiect, valoare]. |
Ce returnează
Un obiect WeakMap.
Exemple
Exemplul 1: Date private atașate unor obiecte
const clicuri = new WeakMap();
const buton = { id: "trimite" };
clicuri.set(buton, 0);
clicuri.set(buton, clicuri.get(buton) + 1);
console.log(clicuri.get(buton), clicuri.has(buton));
console.log(clicuri.delete(buton), clicuri.has(buton));
Rezultat
1 true
true false
Exemplul 2: Cache pentru un calcul scump
const cache = new WeakMap();
function total(cos) {
if (!cache.has(cos)) {
console.log("calculez...");
cache.set(cos, cos.reduce((s, p) => s + p.pret, 0));
}
return cache.get(cos);
}
const cos = [{ pret: 20 }, { pret: 35 }];
console.log(total(cos));
console.log(total(cos));
Rezultat
calculez...
55
55
Greșeli frecvente
- Folosești un text ca cheie:
wm.set("id", 1)aruncăTypeError: Invalid value used as weak map key.
Comenzi înrudite
Map (get, set, has, delete): O colecție de perechi cheie–valoare în care cheile pot fi de orice tip și ordinea este păstrată.WeakSet: Un Set de obiecte care nu împiedică ștergerea lor din memorie; util pentru a „marca” obiecte.WeakRef / FinalizationRegistry: Referințe slabe la obiecte și notificări când un obiect a fost eliberat din memorie.