WeakMap与Map的区别

1、​​WeakMap​​只接受对象作为键名(​​null​​除外),不接受其他类型的值作为键名。

2、​​WeakMap​​的键名所指向的对象,不计入垃圾回收机制。

示例:



const wm = new WeakMap();

const element = document.getElementById('example');

wm.set(element, 'some information');
wm.get(element) // "some information"


上面代码中,先新建一个 Weakmap 实例。然后,将一个 DOM 节点作为键名存入该实例,并将一些附加信息作为键值,一起存放在 WeakMap 里面。这时,WeakMap 里面对​​element​​的引用就是弱引用,不会被计入垃圾回收机制。

一旦消除对该节点的引用,它占用的内存就会被垃圾回收机制释放。Weakmap 保存的这个键值对,也会自动消失。

总之,​​WeakMap​​的专用场合就是,它的键所对应的对象,可能会在将来消失。​​WeakMap​​结构有助于防止内存泄漏。


作者:孟繁贵