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。

相关推荐
芬兰y7 分钟前
VUE 带有搜索功能的穿梭框(简单demo)
前端·javascript·vue.js
好果不榨汁14 分钟前
qiankun 路由选择不同模式如何书写不同的配置
前端·vue.js
小蜜蜂dry14 分钟前
Fetch 笔记
前端·javascript
拾光拾趣录15 分钟前
列表分页中的快速翻页竞态问题
前端·javascript
小old弟16 分钟前
vue3,你看setup设计详解,也是个人才
前端
Lefan20 分钟前
一文了解什么是Dart
前端·flutter·dart
Patrick_Wilson25 分钟前
青苔漫染待客迟
前端·设计模式·架构
vvilkim27 分钟前
Nuxt.js 全面测试指南:从单元测试到E2E测试
开发语言·javascript·ecmascript
写不出来就跑路1 小时前
基于 Vue 3 的智能聊天界面实现:从 UI 到流式响应全解析
前端·vue.js·ui
OpenTiny社区1 小时前
盘点字体性能优化方案
前端·javascript