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