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,也不能得到当前的大小,那么 WeakSet 的实际用途是什么?