Map 和 WeakMap

Map 和 WeakMap 都是 ES6 中新增的数据结构,它们的主要区别在于键的作用域和键的类型。

键的作用域

Map 的键的作用域是全局的,也就是说,Map 中的键不会被污染,也不会对其他的变量产生影响。而 WeakMap 的键的作用域是局部的,也就是说,WeakMap 中的键只在定义它的函数作用域内有效,一旦函数执行完毕,WeakMap 中的键就会被释放。

键的类型

Map 的键可以是任意类型的值,包括对象、数组、函数等等。而 WeakMap 的键只能是对象,因为 WeakMap 是通过引用计数来管理键的,如果键不是对象,就无法计数。

下面是一个使用 Map 和 WeakMap 的示例代码:

javascript 复制代码
// 使用 Map 存储数据
const map = new Map();
map.set("a", 1);
map.set("b", 2);
map.set("c", 3);

// 使用 WeakMap 存储数据
const weakMap = new WeakMap();
const obj1 = {};
const obj2 = {};
weakMap.set(obj1, 1);
weakMap.set(obj2, 2);
weakMap.set(obj1, 3);

console.log(map.get("a")); // 1
console.log(map.get("b")); // 2
console.log(map.get("c")); // 3

console.log(weakMap.get(obj1)); // 3
console.log(weakMap.get(obj2)); // 2

键的可枚举性

Map对象不同的是,WeakMap的键是不可枚举的。不提供列出其键的方法。列表是否存在取决于垃圾回收器的状态,是不可预知的。

总结

如果有需要遍历键值对的需求,则需要使用 Map。

相关推荐
EndingCoder几秒前
打包应用:使用 Electron Forge
前端·javascript·性能优化·electron·前端框架·打包·electron forge
子兮曰1 分钟前
🔥告别ORM臃肿!用Bun.js原生SQLite打造极致轻量级数据库层
前端·sqlite·bun
鹏多多2 分钟前
Vue3响应式原理Proxy的深度剖析
前端·javascript·vue.js
不可能的是3 分钟前
深度解析:Sass-loader Legacy API 警告的前世今生与完美解决方案
前端·javascript
情绪的稳定剂_精神的锚3 分钟前
VSCODE开发一个代码规范的插件入门
前端
养老不躺平7 分钟前
关于nest项目打包
前端·javascript
fdc201712 分钟前
Avalonia:使用附加属性实现命令与事件的绑定
javascript·windows·microsoft
Mike_jia1 小时前
uuWAF:开源Web应用防火墙新标杆——从工业级防护到智能防御实战解析
前端
掘金安东尼1 小时前
Chrome 17 岁了——我们的浏览器简史
前端·javascript·github
袁煦丞1 小时前
群晖NAS FTP远程文件仓库全球访问:cpolar内网穿透实验室第524个成功挑战
前端·程序员·远程工作