JavaScript 中的 WeakSet 是一种特殊的集合,其中的对象具有“弱”引用。这意味着如果没有其他对存储在 WeakSet 中的对象的引用,则该对象可以被垃圾收集。与常规 Set 不同,WeakSet 只接受对象作为元素,并且这些对象是弱保存的。这使得 WeakSet 对于您想要跟踪对象但又不想阻止它们在其他地方不再需要时被垃圾回收的情况非常有用。
1 仅限对象: WeakSet 只能包含对象,不能包含数字或字符串等原始值。
2 弱引用: WeakSet 中对对象的引用是弱引用,这意味着如果没有其他对象引用,则该对象可以被垃圾回收。
3 无 Size 属性: 您无法获取 WeakSet 的大小,因为它不公开其元素的数量。
4。 无迭代: 你不能迭代 WeakSet,因为它没有像 forEach 这样的方法或像 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
让我们想象一个场景,WeakSet 就像间谍的秘密俱乐部。这个俱乐部非常隐秘,如果间谍不再活跃,他们就会消失得无影无踪。俱乐部从不记录其成员的数量,并且您无法获得当前在俱乐部中的成员的列表。您只能询问俱乐部中是否有特定间谍。
// 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
在这个有趣的例子中,WeakSet 是秘密间谍俱乐部,而间谍是对象。当间谍(对象)完成其任务并且没有其他引用它们时,它们就会消失(被垃圾收集),没有任何痕迹,就像当对象不再在代码中的其他地方引用时从 WeakSet 中删除它们一样。
以上是JS 中的弱集?的详细内容。更多信息请关注PHP中文网其他相关文章!