跳到主要内容

WeakMap 与 WeakSet

· 阅读需 2 分钟

MapSet 都是 ES6 中引入的表示集合的数据结构

  • Map 表示「键值对」的集合

    • 有序,插入的顺序
    • 支持 set get has size delete clear
    • 键为任意类型的值
    • 可以遍历
  • Set 表示「不重复值」的集合

    • 元素唯一无序
    • 支持 add has delete clear
    • 可以遍历

WeakMapWeakSet 类似与 Map 和 Set

  • WeakMap
    • 必须为对象
    • 键名都是弱引用
    • 不能遍历
  • WeakSet
    • 元素必须为对象
    • 成员都是弱引用
    • 不能遍历

「弱」主要体现在垃圾回收机制面前的地位

如果一个对象有引用,那么垃圾回收器就不会被回收

而 WeakMap 中的键(对象)以及 WeakSet 中的元素(对象)这两种引用方式,都不在垃圾回收机制考虑范围内,该回收照样会被回收

这也是为什么 WeakMap 和 WeakSet 不支持遍历的原因(键或元素可能会被垃圾回收掉)