WeakMap
WeakMap reprezintă o extensie a colecției Map. Caracteristica distinctivă a WeakMap este că toate elementele sale trebuie să reprezinte obiecte. În același timp, cheile trebuie să fie obiecte.
Crearea WeakMap
Trebuie menționat că obiectul WeakMap nu suportă iterarea.
// WeakMap gol
const weakMap1 = new WeakMap();
// WeakMap cu inițializare de date
let key1 = { key: 1 };
let key2 = { key: 2 };
let value1 = { name: "Tom" };
let value2 = { name: "Sam" };
const weakMap2 = new WeakMap([[key1, value1], [key2, value2]]);
Pentru adăugarea de noi obiecte sau modificarea celor existente, se folosește metoda set():
let key1 = {key:1};
let key2 = {key:2};
let value1 = {name: "Tom"};
let value2 = {name: "Sam"};
const weakMap2 = new WeakMap([[key1, value1]]);
weakMap2.set(key2, value2);
weakMap2.set(key1, {name: "Kate"});
console.log(weakMap2.get(key1)); // {name: "Kate"}
console.log(weakMap2.get(key2)); // {name: "Sam"}
Pentru a obține obiecte în funcție de cheie dintr-un WeakMap, se utilizează metoda get():
let key1 = {key:1};
let key2 = {key:2};
let value1 = {name: "Tom"};
let value2 = {name: "Sam"};
const weakMap2 = new WeakMap([[key1, value1], [key2, value2]]);
console.log(weakMap2.get(key1)); // {name: "Tom"}
Pentru a verifica existența unui element în funcție de o anumită cheie, se utilizează metoda has():
let key1 = {key:1},
key2 = {key:2};
let value1 = {name: "Tom"},
value2 = {name: "Sam"};
const weakMap2 = new WeakMap([[key1, value1]]);
console.log(weakMap2.has(key1)); // true
console.log(weakMap2.has(key2)); // false
Pentru a șterge un element în funcție de o anumită cheie, se utilizează metoda delete():
let key1 = {key:1},
key2 = {key:2};
let value1 = {name: "Tom"},
value2 = {name: "Sam"};
const weakMap2 = new WeakMap([[key1, value1], [key2, value2]]);
console.log(weakMap2.has(key1)); // true
weakMap2.delete(key1);
console.log(weakMap2.has(key1)); // false
Referințe slabe
let jsCode = {code: "js"},
tsCode = {code: "ts"};
let js = {lang: "JavaScript"},
ts = {lang: "TypeScript"};
const weakMap = new WeakMap([[jsCode, js], [tsCode, ts]]);
jsCode = null;
console.log(weakMap);
console.log("Anumite operații");
const timerId = setTimeout(function(){
console.log(weakMap);
clearTimeout(timerId);
}, 30000);
jsCode = null;
let jsCode = {code: "js"},
tsCode = {code: "ts"};
let js = {lang: "JavaScript"},
ts = {lang: "TypeScript"};
const map = new Map([[jsCode, js], [tsCode, ts]]);
jsCode = null;
console.log(map);
console.log("Anumite operații");
const timerId = setTimeout(function(){
console.log(map);
clearTimeout(timerId);
}, 30000);