WeakSet - JavaScript
O objeto WeakSet
Para criar um objeto WeakSet
// WeakSet vazio
const weakSet1 = new WeakSet();
// Inicialização com valores iniciais
const weakSet2 = new WeakSet([{name:"Tom", age: 37}, {name:"Alice", age: 34}]);
Assim como com o objeto Set
Para adicionar dados ao WeakSet
const weakSet = new WeakSet();
weakSet.add({lang: "JavaScript"});
weakSet.add({lang: "TypeScript"});
// weakSet.add(34); // Isso não é permitido - 34 é um número, não um objeto
console.log(weakSet); // WeakSet {{lang: "JavaScript"}, {lang: "TypeScript"} }
É possível adicionar apenas objetos, e não valores escalares como números ou strings.
Para remover um elemento, usa-se o método delete()
const weakSet = new WeakSet();
const js = {lang: "JavaScript"};
const ts = {lang: "TypeScript"};
weakSet.add(js);
weakSet.add(ts);
weakSet.delete(js);
console.log(weakSet); // {{lang: "TypeScript"} }
Para verificar a presença de um objeto no WeakSet
has()
const js = {lang: "JavaScript"};
const ts = {lang: "TypeScript"};
const java = {lang: "Java"};
const weakSet = new WeakSet([js, ts]);
console.log(weakSet.has(ts)); // true
console.log(weakSet.has(java)); // false
Iteração sobre WeakSet
É importante notar que o WeakSet
forEach
WeakSet
for
WeakSet
for
of
const weakSet = new WeakSet([
{lang: "JavaScript"},
{lang: "TypeScript"},
{lang: "Java"}
]);
for(item of weakSet){
console.log(item);
}
Isso resultará em um erro:
Uncaught TypeError: weakSet is not iterable
Referências Fracas
Os objetos são passados para o WeakSet
WeakSet
WeakSet
let js = {lang: "JavaScript"};
let ts = {lang: "TypeScript"};
const weakSet = new WeakSet([js, ts]);
js = null;
console.log(weakSet); // {{lang: "JavaScript"}, {lang: "TypeScript"}}
console.log("Algum trabalho");
const timerId = setTimeout(function(){
console.log(weakSet); // {{lang: "TypeScript"}}
clearTimeout(timerId);
}, 20000);
Neste caso, o objeto WeakSet
js
ts
js
null
Para comparação, veja o que acontece com um Set
let js = {lang: "JavaScript"};
let ts = {lang: "TypeScript"};
const set = new Set([js, ts]);
js = null;
console.log(set); // Set(2) {{lang: "JavaScript"}, {lang: "TypeScript"}}
console.log("Algum trabalho");
const timerId = setTimeout(function(){
console.log(set); // Set(2) {{lang: "JavaScript"}, {lang: "TypeScript"}}
clearTimeout(timerId);
}, 20000);
Com o Set
null
Set