ES6中的WeakSet数据结构
WeakSet
是一种类似于 Set
的集合,但只接受对象作为成员,并且这些对象都是弱引用,不会阻止垃圾回收。
常用方法
-
add(value)
向WeakSet
中添加一个对象。const ws = new WeakSet(); const obj = { name: 'John' }; ws.add(obj);
-
has(value)
检查某个对象是否在WeakSet
中,返回布尔值。ws.has(obj); // true
-
delete(value)
从WeakSet
中删除某个对象,返回布尔值表示是否成功删除。ws.delete(obj); // true
特性
- 只接受对象类型值,不能存储原始类型。
- 弱引用:如果对象在其他地方没有引用,会被自动垃圾回收,无需手动管理。
- 不支持迭代操作 (
forEach
、size
、for...of
)。
使用场景
-
DOM 节点的临时存储
可以将WeakSet
用于存储可能会被动态移除的 DOM 节点。由于是弱引用,当 DOM 节点被移除时,WeakSet
也会自动释放对它的引用,避免内存泄漏。 -
对象的存在性跟踪
在WeakSet
中追踪对象,而不用担心对象被垃圾回收。
总结
WeakSet
适用于管理短期对象引用,特别是在内存管理和垃圾回收方面有优势,常用于动态对象或 DOM 节点的场景。