📜  JavaScript WeakMap() 构造函数(1)

📅  最后修改于: 2023-12-03 15:16:07.459000             🧑  作者: Mango

JavaScript WeakMap() 构造函数

在 JavaScript 中,WeakMap() 构造函数是一种特殊的 map 对象,用于存储键值对并允许我们关联对象的信息。这个对象的键必须是对象,值可以是任意类型。与普通 Map 对象一样,WeakMap() 构造函数也使用键值对来存储数据,但是它有以下几个特点:

  • 对象是弱引用,当对象没有被引用时,会被自动释放。
  • 属性和方法是有限的,只有 set()、get()、has() 和 delete()方法。
使用 WeakMap() 构造函数

我们可以使用 WeakMap() 构造函数创建一个新的 WeakMap 对象来存储多个键值对。下面是一个示例代码:

const obj1 = { name: "Jack", age: 25 };
const obj2 = { name: "Amy", age: 30 };
const weakMap = new WeakMap([[obj1, "Jack"], [obj2, "Amy"]]);

在这个例子中,我们创建了两个对象 obj1 和 obj2,并存储了它们的 name 和 age 信息。然后,我们使用 WeakMap() 构造函数将这些信息关联在一起,存储在 weakMap 对象中。

set() 方法

我们可以使用 set() 方法向 WeakMap 对象添加新的键值对。set() 方法接受两个参数,第一个参数是键,必须是一个对象,第二个参数是任意类型的值。如果键已存在,则它的值会被更新。下面是一个示例代码:

const obj1 = { name: "Jack", age: 25 };
const obj2 = { name: "Amy", age: 30 };
const weakMap = new WeakMap();
weakMap.set(obj1, "Jack");
weakMap.set(obj2, "Amy");
get() 方法

我们可以使用 get() 方法获取 WeakMap 对象中指定键的值。get() 方法接受一个参数,即键对象。如果键不存在,返回 undefined。下面是一个示例代码:

const obj1 = { name: "Jack", age: 25 };
const obj2 = { name: "Amy", age: 30 };
const weakMap = new WeakMap([[obj1, "Jack"], [obj2, "Amy"]]);
console.log(weakMap.get(obj2)); // 输出 "Amy"
has() 方法

我们可以使用 has() 方法检查 WeakMap 对象中是否存在指定的键。has() 方法接受一个参数,即键对象。如果键存在,返回 true,否则返回 false。下面是一个示例代码:

const obj1 = { name: "Jack", age: 25 };
const obj2 = { name: "Amy", age: 30 };
const weakMap = new WeakMap([[obj1, "Jack"], [obj2, "Amy"]]);
console.log(weakMap.has(obj1)); // 输出 true
console.log(weakMap.has(obj2)); // 输出 true
console.log(weakMap.has({})); // 输出 false
delete() 方法

我们可以使用 delete() 方法从 WeakMap 对象中删除指定的键。delete() 方法接受一个参数,即键对象。如果键存在,删除它并返回 true,否则什么都不做并返回 false。下面是一个示例代码:

const obj1 = { name: "Jack", age: 25 };
const obj2 = { name: "Amy", age: 30 };
const weakMap = new WeakMap([[obj1, "Jack"], [obj2, "Amy"]]);
weakMap.delete(obj1);
console.log(weakMap.has(obj1)); // 输出 false
总结

WeakMap() 构造函数是一个非常有用的对象,它允许我们以弱引用的方式存储对象信息,并自动释放它们。它的属性和方法虽然有限,但足以满足我们的需求。在使用 WeakMap() 构造函数时,需要注意键必须是对象,否则会报错。