一、WeakSet对象是一组对象的集合。WeakSet中的对象不重复且不可枚举。
1、WeakSet是类似于Set的集合,它仅存储对象,并且一旦通过其他方式无法访问它们,便会将其删除。
二、WeakSet的表现

  • 与Set类似,但是我们只能向WeakSet添加对象(而不能是原始值)。
  • 对象只有在其它某个(些)地方能被访问的时候,才能留在 set 中。
  • 跟Set一样,WeakSet支持add,has和delete方法,但不支持size和keys(),并且不可迭代。

三、变“弱(weak)”的同时,它也可以作为额外的存储空间。但并非针对任意数据,而是针对“是/否”的事实。WeakSet的元素可能代表着有关该对象的某些信息。
【示例1】我们可以将用户添加到WeakSet中,以追踪访问过我们网站的用户:

  1. let visitedSet = new WeakSet();
  2. let john = { name: "John" };
  3. let pete = { name: "Pete" };
  4. let mary = { name: "Mary" };
  5. visitedSet.add(john); // John 访问了我们
  6. visitedSet.add(pete); // 然后是 Pete
  7. visitedSet.add(john); // John 再次访问
  8. // visitedSet 现在有两个用户了
  9. // 检查 John 是否来访过?
  10. alert(visitedSet.has(john)); // true
  11. // 检查 Mary 是否来访过?
  12. alert(visitedSet.has(mary)); // false
  13. john = null;
  14. // visitedSet 将被自动清理

使用案例

一、WeakSet的用例很有限,比如使用DOM元素作为键来追踪它们而不必担心内存泄漏。