JavaScript 中的 Map 和 WeakMap 有什么区别?
javascriptobject oriented programmingprogramming更新于 2025/8/7 7:08:17
Map 和 WeakMap 之间的区别
Map 和 WeakMap 的功能机制相同,但差别不大。
1) WeakMap 仅接受对象作为键,而 Map 除了对象之外,还接受字符串、数字等原始数据类型。
2) WeakMap 如果没有对充当键的对象进行引用,则对象不会避免垃圾回收。因此,WeakMap 中没有检索键的方法,而 Map 中有诸如 Map.prototype.keys() 之类的方法来获取键。
3) WeakMap 中没有 size 属性。
Map
它用于将键与值关联,而不管数据类型如何,例如字符串、数字、对象等。
示例
<html>
<body>
<script>
// 创建一个新的 Map 对象
var map = new Map();
// 定义一个将在主键中使用的对象
var objKey = {name: 'tutorialspoint'};
document.write("</br>");
// 添加一个新元素,该元素的键为字符串,值也为字符串
map.set('first', 'a');
document.write("</br>");
// 添加一个新元素,其键为数字,值是数组
map.set(3, ['c']);
document.write("</br>");
// 添加一个新元素,其键为对象,值是数字
map.set(objKey, 3);
// 添加一个新元素,其键为数组,值是字符串
map.set(['add', 'mapping'], 'd');
// 检查映射中是否存在具有键"2"的元素。
document.write(map.has(2));
document.write("</br>");
// 检查映射中是否存在具有键"first"的元素。
document.write(map.has('first'));
document.write("</br>");
// 检索具有键"first"的元素。打印"a"
document.write(map.get('first'));
document.write("</br>");
// 检索具有 objKey 值的元素。
document.write(map.get(objKey));
document.write("</br>");
// 检索具有 "empty" 键的元素。打印 "undefined"
document.write(map.get('empty'));
document.write("</br>");
// 检索地图大小。打印 "4"
document.write(map.size);
document.write("</br>");
// 删除所有值
map.clear();
document.write(map.size);
</script>
</body>
</html>
输出
false true a 3 undefined 4 0
WeakMap
在下面的例子中,我们可以发现 WeakMap 只接受对象,而不接受任何原始值(字符串、数字)
示例
<html>
<body>
<script>
// 创建一个新的 WeakMap 对象
var strongMap = new WeakMap();
// 定义一个将在映射中用作键的对象
var obj4 = {d: 4};
// 定义另一个将在映射中用作键的对象
var obj5 = {e: 5};
// 添加一个新元素,该元素以对象为键,以字符串为值
weakMap.set(obj4, 'fourth');
// 添加一个新元素,其键为 Object,值是 String
weakMap.set(obj5, 'fifth');
// 添加一个新元素,其键为 Function,值是 Number
weakMap.set(function(){}, 7);
// 检查弱映射中是否存在键值为 objKey4 的元素。
document.write(weakMap.has(obj4));
document.write("</br>");
// 检索与值为 objKey4 的键关联的元素的值。打印 "first"
document.write(weakMap.get(obj4));
document.write("</br>");
// 删除具有 objKey4 键的元素。打印 "true"
document.write(weakMap.delete(obj4));
document.write("</br>");
// 删除弱映射的所有元素
weakMap.clear();
</script>
</body>
</html>
输出
true fourth true
相关文章
有用资源
javascript 参考教程 - 该教程包含有关 javascript 的更多信息:https://www.cainiaomax.com/javascript/

