在 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 中是不可迭代的。