Map和WeakMap的区别和关联

327 阅读1分钟

Map和WeakMap

  • 定义:WeakMap对象是一组键/值对的集合,其中的键是弱引用。其键必须是对象,而值可以是任意的
  • 背景:
    • map相关的API是基于两个数组实现的(一个存放键,一个存放值),当从该map中取值的时候,需要遍历所有的键,然后使用索引从存储值的数组中检索出相应的值。但是这样会存在两个很大的缺点
      • 高时间复杂度:首先赋值和搜索操作都是O(n)的时间复杂度,因为这两个操作都需要遍历整个数组来进行匹配
      • 内存泄漏:因为数组会一直引用着每个键和值,这种引用使得即使没有其他任何引用存在,垃圾回收机制也不能处理他们
  • WeakMap的好处
    • 相比Map维护两个数组,原生的WeakMap持有的是每个键对象的“弱引用”:意味着垃圾回收机制可以正常进行
    • 原生WeakMap的结构是特殊且有效的,其用于映射key只有在其没有被回收时才是有效的
  • WeakMap的特点
    • 正由于这样的弱引用WeakMap的key是不可枚举的,没有方法能给出所有的key。如果key是可枚举的,其列表将会受垃圾回收机制的影响,从而得到不确定的结果

以上内容如有纰漏之处恳请指点,感谢!