首页 > web前端 > js教程 > 正文

JS 中的弱集?

WBOY
发布: 2024-07-19 19:27:52
原创
299 人浏览过

WeakSet in JS?

JavaScript 中的 WeakSet 是一种特殊的集合,其中的对象具有“弱”引用。这意味着如果没有其他对存储在 WeakSet 中的对象的引用,则该对象可以被垃圾收集。与常规 Set 不同,WeakSet 只接受对象作为元素,并且这些对象是弱保存的。这使得 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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!