简介
在 ES6 中,引入了 Map 和 WeakMap 两个新的集合类型。Map 可以将任何类型的值作为键,而 WeakMap 只能将对象作为键,且对于键所引用对象的引用不会阻碍垃圾回收程序回收这些对象。本文将详细介绍 Map 和 WeakMap 的使用以及它们之间的差异。
Map 的使用
创建 Map
可以通过如下方式创建 Map:
const map = new Map();
也可以通过数组初始化 Map:
const map = new Map([['foo', 'bar'], ['baz', 42]]);
这样创建的 Map 对象中,键名 foo 指向字符串 'bar',键名 baz 指向数值 42。
Map 方法
Map 对象提供了一些方法,如下所示:
set(key, value)
:设置键名对应的值。get(key)
:获取键名对应的值,如果不存在则返回 undefined。has(key)
:返回一个布尔值,表示键名是否存在。delete(key)
:删除指定键名对应的键值对。clear()
:清除所有键名。
-- -------------------- ---- ------- ----- --- - --- ------ -------------- ------- -------------- ---- ---------------------------- -- ----- ---------------------------- -- ---- ------------------ ---------------------------- -- ----- ------------ ---------------------- -- -
Map 遍历
Map 提供了一些方法来遍历其键值对,如下所示:
keys()
:返回键名的遍历器。values()
:返回键值的遍历器。entries()
:返回键值对的遍历器,在遍历时返回一个包含键名和键值的数组。forEach(callbackFunc)
:遍历 Map,对于每个键值对都执行指定的回调函数。
-- -------------------- ---- ------- ----- --- - --- ------------ ------- ------- ------ --- ------ --- -- ----------- - ----------------- -- ------ ----- - --- ------ ----- -- ------------- - ------------------- -- ------ -- - --- ------ ----- ------ -- -------------- - ---------------- ------- -- ----- ------ ----- -- - ------------------- ---- -- ---------------- -------- -- ----- ------ ----- --
Map 应用
Map 可以用于任何需要键值对集合的场景,例如:
- 缓存数据
- 替代对象字面量
- 字符串映射
WeakMap 的使用
WeakMap 与 Map 功能类似,但有一个显著的不同点:WeakMap 中的键只能是对象,并且不会增加这些对象的引用计数。这意味着如果这些对象在其他地方没有其它引用,它们会被自动回收。WeakMap 也没有 forEach 方法。
创建 WeakMap
可以通过如下方式创建 WeakMap:
const weakmap = new WeakMap();
无法通过数组初始化 WeakMap。
WeakMap 方法
WeakMap 提供的方法只有 set、get、has 和 delete,与 Map 方法类似。但需要注意的是,只有对象键才能使用这些方法。
const weakmap = new WeakMap(); const key = {}; weakmap.set(key, 'value'); console.log(weakmap.get(key)); // 'value'
WeakMap 的应用
WeakMap 的主要应用场景是实现私有属性,例如:
-- -------------------- ---- ------- ----- ----------- - --- ---------- ----- ------ - ----------------- ---- - --------------------- - ----- --- --- - --------- - ------ --------------------------- - -------- - ------ -------------------------- - - ----- ------ - --- -------------- ---- ------------------------------ -- ------ ----------------------------- -- -- ------------------------------------- -- ---------
总结
本文对 ES6 中的 Map 和 WeakMap 进行了详细的介绍,包括创建、方法、遍历以及应用。在实际开发中,应根据具体场景来选择使用 Map 或 WeakMap,并善于运用它们来提高代码的可读性、可维护性和性能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c5d3df95c405902ee371f0