JavaScript中WeakMap和Map区别_弱引用优势

admin 百科 11
WeakMap与Map的核心区别在于键类型和引用强度:WeakMap键只能是对象且为弱引用,支持自动GC清理;Map键可为任意类型且为强引用。WeakMap不可遍历、无size属性,仅提供set/get/has/delete方法,适用于私有状态存储等需避免内存泄漏的场景。

JavaScript中WeakMap和Map区别_弱引用优势-第1张图片-佛山资讯网

WeakMap 和 Map 最核心的区别在于:WeakMap 的键必须是对象,且对键是弱引用;而 Map 的键可以是任意类型,且对键是强引用。 这个“弱引用”特性,让 WeakMap 能自动配合垃圾回收(GC),避免内存泄漏,特别适合做私有数据存储或元数据绑定。

键的类型和引用强度不同

Map 允许任何类型的值作为键(字符串、数字、对象、Symbol 甚至 undefined),并且只要这个键还被 Map 持有,它就不会被 GC 回收——这就是强引用。WeakMap 则严格限制键只能是对象(包括函数、数组、DOM 元素等),而且这个引用是弱引用:如果一个对象只被 WeakMap 作为键引用,而其他地方都不再持有它,那么 GC 就可以随时把它清理掉,WeakMap 内部也会自动移除对应条目。

无法遍历和检测大小

WeakMap 不提供 keys()、values()、entries() 或 size 属性。你不能遍历它,也不能知道它存了多少项。这是因为它的内部条目可能随时被 GC 清理,暴露这些接口会破坏“弱引用”的语义一致性,也会影响引擎优化。所以 WeakMap 只提供四个基础方法:set(key, value)get(key)has(key)delete(key),且都要求 key 是对象。

典型使用场景:隐藏私有状态

WeakMap 常用于给对象“挂载”不暴露、不干扰原型、也不阻止回收的附加信息:

标签: javascript java 工具 区别

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~