📜  ES6 中的弱映射是什么?(1)

📅  最后修改于: 2023-12-03 14:41:00.822000             🧑  作者: Mango

ES6 中的弱映射是什么?

在 ES6 中,新增了一种数据结构称为弱映射(WeakMap)。弱映射是一种类似于 Map 的数据结构,但是相比之下有一些特殊的特性。

弱映射与映射的区别
  1. 弱键:弱映射中的键只能是对象,而不能是原始类型的值(例如字符串、数字等)。
  2. 弱引用:当一个对象作为键被弱映射所引用时,如果没有其他对象再引用这个键对象,那么它将被垃圾回收。
弱映射的特点
  1. 弱映射不会阻止键对象被垃圾回收。当键对象被垃圾回收后,它对应的键值对也会自动从弱映射中被清除。
  2. 弱映射没有提供与迭代相关的方法,例如 keys(), values(), entries(), forEach() 等。因为键对象可能随时被垃圾回收,这些方法在迭代时可能会出现不可预期的行为。
  3. 弱映射只提供了以下几个方法:get(key), set(key, value), delete(key), has(key)
弱映射的应用场景

弱映射的特点使得它在一些特定的应用场景下十分有用:

  1. 缓存管理:弱映射可以用来实现缓存管理,当对象不再被其他引用使用时,自动从缓存中删除,避免内存泄漏。
  2. 对象私有属性:弱映射可以作为对象的私有属性存储,保持私有属性的引用关系,同时不会影响垃圾回收。
使用示例
// 创建一个弱映射
const weakMap = new WeakMap();

// 创建两个键对象
const object1 = {};
const object2 = {};

// 添加键值对到弱映射中
weakMap.set(object1, "Value 1");
weakMap.set(object2, "Value 2");

// 从弱映射中获取值
console.log(weakMap.get(object1)); // 输出: "Value 1"

// 检查键是否存在于弱映射中
console.log(weakMap.has(object2)); // 输出: true

// 删除键值对
weakMap.delete(object1);

// 检查键是否存在于弱映射中
console.log(weakMap.has(object1)); // 输出: false

以上示例展示了如何创建和使用弱映射,以及如何添加、获取和删除键值对。

总之,弱映射是 ES6 提供的一种特殊的数据结构,它在一些特定的应用场景下能够提供便利和性能优化,特别是在缓存管理和对象私有属性存储方面。