什么是Javascript的WeakMap和WeakSet?

admin 百科 15
WeakMap 和 WeakSet 是 JavaScript 中支持弱引用的集合类型,WeakMap 键必须为对象且不可遍历、无 size,用于私有元数据缓存;WeakSet 仅存对象、不可遍历、无 size,适用于对象状态标记,二者均避免内存泄漏。

什么是Javascript的WeakMap和WeakSet?-第1张图片-佛山资讯网

WeakMap 和 WeakSet 是 JavaScript 中两种“弱引用”的集合类型,它们的核心特点是:不阻止垃圾回收机制回收其键(WeakMap)或值(WeakSet)所引用的对象。换句话说,只要对象在其他地方不再被强引用,即使它还在 WeakMap 的键里、或 WeakSet 里,也会被自动清理掉。

WeakMap:只接受对象作键的弱引用键值对

WeakMap 类似于 Map,但有三个关键限制:

  • 键(key)必须是对象,不能是字符串、数字或 symbol
  • 不支持遍历(没有 keys()、values()、entries() 或 forEach)
  • 没有 size 属性,无法获知当前有多少条目

这些限制不是缺陷,而是为了配合“弱引用”语义——不让引擎因可枚举、可计数而必须保留内部引用。常见用途包括:给第三方对象“悄悄”附加私有元数据,又不干扰它的生命周期。比如:

const cache = new WeakMap();
function getProcessedData(obj) {
  if (cache.has(obj)) return cache.get(obj);
  const result = expensiveProcess(obj);
  cache.set(obj, result); // obj 被弱引用
  return result;
}

当 obj 被外部丢弃后,cache 里的这一项会自动消失,不会造成内存泄漏。

立即学习“Java免费学习笔记(深入)”;

WeakSet:只存对象、不可遍历的弱引用集合

WeakSet 类似于 Set,但也有严格限制:

标签: javascript java js 键值对 为什么

发布评论 0条评论)

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