第六章 JavaScript标准库 6.10 WeakSet

94 阅读1分钟

6.10 WeakSet

WeakSet 是 ES6 中新增的一种数据结构,它类似于 Set,但是有以下几点不同:

  • 1 WeakSet 中的成员只能是对象,不能是原始值;
  • 2 WeakSet 中的对象成员都是弱引用,即垃圾回收机制不会考虑 WeakSet 对这些对象的引用,因此当对象不再被其他引用引用时,垃圾回收机制会自动回收该对象占用的内存;
  • 3 WeakSet 没有 size 属性,也不能遍历成员,因为成员随时可能被回收,遍历成员没有意义;
  • 4 WeakSet 没有 clear() 方法。 WeakSet 的 API 与 Set 类似,有以下几个方法:
  • 1 WeakSet.prototype.add(value):向 WeakSet 中添加一个新的对象成员;
  • 2 WeakSet.prototype.delete(value):从 WeakSet 中删除一个对象成员;
  • 3 WeakSet.prototype.has(value):判断 WeakSet 中是否包含指定的对象成员。 使用示例:
const weakSet = new WeakSet();
const obj = { name: 'Alice' };

weakSet.add(obj);
console.log(weakSet.has(obj)); // true
weakSet.delete(obj);
console.log(weakSet.has(obj)); // false

需要注意的是,由于 WeakSet 中的成员都是弱引用,因此不能确保在某个时刻成员是否存在,因此也不能遍历 WeakSet 中的成员。WeakSet 主要用于存储一些临时对象,以便于在它们不再需要时自动释放内存。