gpt4 book ai didi

javascript - ECMAScript 6 : what is WeakSet for?

转载 作者:行者123 更新时间:2023-11-28 03:44:20 26 4
gpt4 key购买 nike

WeakSet 应该通过弱引用来存储元素。也就是说,如果一个对象没有被其他任何东西引用,那么它应该从 WeakSet 中清除。

我编写了以下测试:

var weakset = new WeakSet(),
numbers = [1, 2, 3];

weakset.add(numbers);
weakset.add({name: "Charlie"});

console.log(weakset);

numbers = undefined;

console.log(weakset);

即使我的 [1, 2, 3] 数组没有被任何东西引用,它也没有从 WeakSet 中删除。控制台打印:

WeakSet {[1, 2, 3], Object {name: "Charlie"}}
WeakSet {[1, 2, 3], Object {name: "Charlie"}}

这是为什么?

另外,我还有一个问题。像这样直接向 WeakSet 添加对象有什么意义:

weakset.add({name: "Charlie"});

这些是 Traceur 的故障还是我遗漏了什么?

最后,如果我们甚至无法迭代它也无法获取当前大小,那么 WeakSet 的实际用途是什么?

最佳答案

it's not being removed from the WeakSet. Why is that?

很可能是因为垃圾收集器尚未运行。但是,您说您正在使用 Traceur,所以可能只是它们没有得到适当的支持。我想知道 console 如何显示 WeakSet 的内容。

What is the point of adding objects to WeakSets directly?

WeakSet 添加对象文字绝对没有意义。

What is the practical use of WeakSet if we cannot even iterate through it nor get the current size?

您可以获得的只是一点信息:该对象(或一般而言,值)是否包含在集合中?

这在您想要“标记”对象而不实际改变它们(在它们上设置属性)的情况下非常有用。许多算法都包含某种“如果已经看到 x”条件(JSON.stringify 循环检测可能是一个很好的例子),并且当您与用户一起工作时建议使用 Set/WeakSet 提供值。这里 WeakSet 的优点是,当你的算法仍在运行时,它的内容可以被垃圾收集,因此当你处理大量数据时,它有助于减少内存消耗(甚至防止泄漏)这是延迟(甚至可能异步)生成的。

关于javascript - ECMAScript 6 : what is WeakSet for?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48644221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com