Maison  >  Article  >  interface Web  >  WeakSet en JS ?

WeakSet en JS ?

WBOY
WBOYoriginal
2024-07-19 19:27:52301parcourir

WeakSet in JS?

Un WeakSet en JavaScript est un type spécial d'ensemble dans lequel les objets qu'il contient ont des références "faibles". Cela signifie que s'il n'y a pas d'autres références à un objet stocké dans le WeakSet, l'objet peut être récupéré. Contrairement à un Set classique, WeakSet n'accepte que les objets en tant qu'éléments, et ces objets sont tenus faiblement. Cela rend WeakSet utile dans les cas où vous souhaitez suivre des objets mais ne voulez pas les empêcher d'être récupérés s'ils ne sont plus nécessaires ailleurs.

Caractéristiques de WeakSet :

1 Uniquement des objets : Un WeakSet ne peut contenir que des objets, pas des valeurs primitives comme des nombres ou des chaînes.

2 Références faibles : Les références aux objets dans un WeakSet sont faibles, ce qui signifie que s'il n'y a pas d'autre référence à un objet, il peut être récupéré.

3 Pas de propriété Size : Vous ne pouvez pas obtenir la taille d'un WeakSet car il n'expose pas le nombre de ses éléments.

4. Aucune itération : Vous ne pouvez pas parcourir un WeakSet, car il n'a pas de méthodes comme forEach ou d'itérateurs comme un Set.

Utilisation de base :

let weakset = new WeakSet();

let obj1 = {name: "object1"};
let obj2 = {name: "object2"};

weakset.add(obj1);
weakset.add(obj2);

console.log(weakset.has(obj1)); // true
console.log(weakset.has(obj2)); // true

obj1 = null; // obj1 is eligible for garbage collection

console.log(weakset.has(obj1)); // false

Échantillon amusant :

Imaginons un scénario dans lequel WeakSet est comme un club secret pour espions. Ce club est très secret et si un espion n'est plus actif, il disparaît sans laisser de trace. Le club ne compte jamais ses membres et vous ne pouvez pas obtenir une liste de ceux qui font actuellement partie du club. Vous pouvez seulement demander si un espion spécifique est dans le club.

// The Secret Spy Club
class Spy {
    constructor(name) {
        this.name = name;
    }
    introduce() {
        console.log(`Hi, I am Agent ${this.name}`);
    }
}

let spy1 = new Spy("007");
let spy2 = new Spy("008");

let spyClub = new WeakSet();

// Adding spies to the secret club
spyClub.add(spy1);
spyClub.add(spy2);

console.log(spyClub.has(spy1)); // true
console.log(spyClub.has(spy2)); // true

spy1.introduce(); // Hi, I am Agent 007
spy2.introduce(); // Hi, I am Agent 008

// Spy 007 finishes his mission and disappears
spy1 = null; // Now Agent 007 is no longer in the club and is eligible for garbage collection

// Let's see if spies are still in the club
console.log(spyClub.has(spy1)); // false, because Agent 007 is no longer referenced
console.log(spyClub.has(spy2)); // true, because Agent 008 is still active

// Agent 008 finishes his mission too
spy2 = null; // Now Agent 008 is also eligible for garbage collection

// Checking club members again
console.log(spyClub.has(spy2)); // false, no active spies left

Dans cet exemple amusant, le WeakSet est le club d'espionnage secret, et les espions sont des objets. Lorsque les espions (objets) terminent leurs missions et qu'il n'y a aucune autre référence à eux, ils disparaissent (sont récupérés) sans aucune trace, tout comme la façon dont les objets sont supprimés d'un WeakSet lorsqu'ils ne sont plus référencés ailleurs dans le code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Un proxy en JavaScriptArticle suivant:Un proxy en JavaScript