在 JavaScript 中,WeakMap 对象是一个键值对集合,其中的键是弱引用的。WeakMap 的键必须是对象或者是未注册的符号,而值可以是任意的 JavaScript 类型。
WeakMap 与 JavaScript 中的 Map 类似。WeakMap 和 Map 数据结构的主要区别在于 WeakMap 数据结构仅使用对象作为键,而 Map 可以使用其他数据类型作为键。
如果你使用除了对象之外的数据类型作为 WeakMap 的键,则会得到类型错误。
语法
你可以按照以下语法在 JavaScript 中使用 WeakMap:
const weak_map = new WeakMap();
在上面的语法中,我们使用 new 关键字和 WeakMap() 函数来创建一个新的 WeakMap 实例。
WeakMap 提供了设置、获取和删除键值对的方法。以下是 WeakMap 的属性和方法列表:
WeakMap 属性
下面是 WeakMap 的属性及其描述:
WeakMap 方法
下面是与 WeakMap 对象相关的方法及其描述:
| 序号 |
方法 & 描述 |
| 1 |
delete() |
| 2 |
get() |
| 3 |
has() |
| 4 |
set() |
WeakMap 构造器
下面是 WeakMap 构造器在 JavaScript 中的使用:
示例
示例:向 WeakMap 插入键值对
在下面的示例中,我们使用构造函数定义了 WeakMap。之后,我们使用 set() 方法将 laptop 对象设置为键,其价格设置为值。
最后,我们使用 get() 方法获取与 'laptop' 键相关的值。
<html>
<body>
<p id="output">The laptop price is: </p>
<script>
const wm = new WeakMap();
const laptop = {
brand: "HP",
model: "Pavilion",
}
wm.set(laptop, 100000);
document.getElementById("output").innerHTML += wm.get(laptop);
</script>
</body>
</html>
输出:
The laptop price is: 100000
如果执行程序,它返回与 "laptop" 键相关的值,即 "10000"。
示例:从 WeakMap 删除键值对
在下面的示例中,我们使用 set() 方法将键值对插入到 WeakMap 中。
之后,我们使用 delete() 方法从 WeakMap 中删除键值对。删除键值对后,当你再次尝试访问时,WeakMap 返回 undefined,如输出所示。
注意 - WeakMaps 在 JavaScript 中是不可迭代的。
<html>
<body>
<div id="output1">The laptop price is: </div>
<div id="output2">The laptop price after deletion is: </div>
<script>
const wm = new WeakMap();
const laptop = {
brand: "HP",
model: "Pavilion",
}
wm.set(laptop, 100000);
document.getElementById("output1").innerHTML += wm.get(laptop);
wm.delete(laptop);
document.getElementById("output2").innerHTML += wm.get(laptop);
</script>
</body>
</html>
输出:
The laptop price is: 100000
The laptop price after deletion is: undefined
返回 "undefined" 表示键值对已被从 WeakMap 中删除。
WeakMaps 在 JavaScript 中是不可迭代的。