ES6 中内置的 WeakMap 是什么?

WeakMap是ES6中的一种集合类型,其键为弱引用的对象,适用于存储私有变量、缓存计算结果和数据缓存,能在键对象被垃圾回收时自动释放内存,防止内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES6中的 WeakMap 是一种新的集合类型,在功能上类似于 Map,但是它只接受对象作为键(key)。WeakMap 中的键必须是对象,而值可以是任何类型的数据。WeakMap 的特点是它的键是弱引用的,即如果键对象被垃圾回收,则该键值对会从 WeakMap 中自动删除,这样可以避免内存泄漏。

实际用途应用示例

WeakMap 主要用于存储对象与对象之间的一些关联信息,它的主要应用场景有以下几个:

私有变量 WeakMap 可以用于模拟一些私有变量的实现,即用 WeakMap 存储对象的私有变量,只有对应的对象可以访问它们。

const privateData = new WeakMap();
class Person {
  constructor(name, age) {
    privateData.set(this, { name, age });
  }
  getName() {
    return privateData.get(this).name;
  }
  getAge() {
    return privateData.get(this).age;
  }
}

缓存WeakMap 可以用于缓存一些对象的计算结果,这样可以避免重复计算

const cache = new WeakMap();
function countChars(str) {
  if (cache.has(str)) {
    return cache.get(str);
  }
  const count = str.length;
  cache.set(str, count);
  return count;
}

数据缓存WeakMap 可以用于存储一些数据,这些数据可以在对象被垃圾回收时自动删除。

const dataCache = new WeakMap();
function getData(obj) {
  if (dataCache.has(obj)) {
    return dataCache.get(obj);
  }
  const data = fetchData(obj);
  dataCache.set(obj, data);
  return data;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值