跳至主要內容

WeakMap 和 WeakSet

风不止大约 1 分钟javascriptweekMap

图片拖动及放大缩小

概述

`WeakMap` 和 `WeakSet` 是 ECMAScript 2015(ES6)中引入的两种新的数据结构。
它们的键(对于 WeakMap)或值(对于 WeakSet)是弱引用,即如果没有其他对这些对象的引用,
它们可以被垃圾回收。这对于避免内存泄漏特别有用。

WeakMap

WeakMap 是一个键值对的集合,其中的键必须是对象,而值可以是任意类型。
当键不再被其他引用持有时,键值对会自动被垃圾回收。

使用方法

  1. 创建实例
const weakMap = new WeakMap();
  1. 添加键值对
  let obj = {};
  weakMap.set(obj, 'some value');

  1. 获取值
  console.log(weakMap.get(obj)); // 输出: 'some value'
  1. 检查是否存在某个值
  console.log(weakMap.has(obj)); // 输出: true
  1. 删除键值对
  weakMap.delete(obj);
  console.log(weakMap.has(obj)); // 输出: false

示例

const weakMap = new WeakMap();
let user = { name: "John Doe" };

// 设置键值对
weakMap.set(user, "User Data");

// 获取值
console.log(weakMap.get(user)); // 输出: 'User Data'

// 检查是否存在某个键
console.log(weakMap.has(user)); // 输出: true

// 删除键值对
weakMap.delete(user);
console.log(weakMap.has(user)); // 输出: false

// 当没有其他引用时,'user' 将被垃圾回收
user = null;