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.
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.
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
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!