gpt4 book ai didi

javascript - ECMA 脚本 6 : what is WeakSet for?

转载 作者:IT王子 更新时间:2023-10-29 03:01:02 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"}}

这是为什么?

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

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 - ECMA 脚本 6 : what is WeakSet for?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30556078/

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