一、Map
Map 和对象类似,也是键值对的形式。对象的 key 可以是字符串也可以是 Symbol;而 Map 的 key 不仅限于这两种,任何数据类型都可以作为 Map 的 key。Map 通过 set()
设置值,通过get()
读取值,通过has()
判断某个 key 是否存在,通过delete
删除值,通过clear()
清空,拥有size
属性。
1 | let m = new Map() |
也可以使用数组的方式给 Map 设置值:
1 | let m = new Map([ |
Map 的遍历方式与 Set 一致,使用forEach
或者for of
:
1 | m.forEach((value, key) => console.log(value, key)) |
Map 的 API 比 Object 的API 更灵活;在频繁增删键值对的场景,Map 的性能优于 Object。
二、WeakMap
WeakMap 与 Map 的区别:WeakMap 的 key 只支持引用数据类型;WeakMap 不支持 clear() 方法;WeakMap 不支持遍历;WeakMap 没有 size 属性;WeakMap 是一种弱引用。
弱引用有益于防止内存泄露。