在 ES6 中, Map
和 WeakMap
是两个非常有用的集合类型。 Map
是一个键值对的集合,其中键可以是任何类型,而值则可以是任何类型的值。 WeakMap
与 Map
类似,但是它只接受对象作为键,并且键被保存为弱引用。这意味着如果一个键不再被引用,它将被垃圾回收。在这篇文章中,我们将学习如何恰当地使用 Map
和 WeakMap
。
使用 Map
创建 Map
创建一个空的 Map
很简单,只需要使用 new Map()
即可。
const myMap = new Map();
Map
还可以接受一个可迭代对象,例如一个数组,在其创建时初始化键值对。
const myMap = new Map([ ['key1', 'value1'], ['key2', 'value2'], ]);
如果试图使用相同的键多次在 Map
中设置一个值,将会覆盖之前的值。这是因为在 Map
中,每个键都是唯一的。
const myMap = new Map(); myMap.set('key1', 'value1'); myMap.set('key1', 'new value1'); console.log(myMap.get('key1')) // 'new value1'
获取 Map 中的值
获取 Map
中的值很简单,只需要使用 get()
方法并传递一个键。
const myMap = new Map([ ['key1', 'value1'], ['key2', 'value2'], ]); console.log(myMap.get('key1')); // 'value1' console.log(myMap.get('key2')); // 'value2'
判断 Map 中是否存在特定的键
我们可以使用 has()
方法来检查 Map
中是否存在一个键。
const myMap = new Map([ ['key1', 'value1'], ['key2', 'value2'], ]); console.log(myMap.has('key1')); // true console.log(myMap.has('key3')); // false
删除 Map 中的键值对
我们可以使用 delete()
方法删除 Map
中的键值对。
const myMap = new Map([ ['key1', 'value1'], ['key2', 'value2'], ]); myMap.delete('key1'); console.log(myMap.get('key1')); // undefined
遍历 Map 中的键值对
遍历 Map
中的键值对有多种方法。可以使用 forEach()
,for-of
循环以及迭代器。下面是一些示例:
-- -------------------- ---- ------- ----- ----- - --- ----- -------- ---------- -------- ---------- --- -- ------- --------------------- ---- -- - -------------------- ----------- --- -- ------ --- ------ ----- ------ -- ------ - -------------------- ----------- - -- --- ----- ---------- - ---------------- --- ------ ----- ------ -- ----------- - -------------------- ----------- -
使用 WeakMap
创建 WeakMap
创建一个空的 WeakMap
很简单,只需要使用 new WeakMap()
即可。
const myWeakMap = new WeakMap();
设置和获取键值对
在 WeakMap
中,只有对象可以作为键,否则会出现语法错误。使用 set()
和 get()
方法设置和获取键值对。
-- -------------------- ---- ------- ----- --------- - --- ---------- ----- ---- - --- ----- ---- - --- ------------------- ---------- ------------------- ---------- --------------------------------- -- -------- --------------------------------- -- --------
判断是否存在键
我们可以使用 has()
方法来检查 WeakMap
中是否存在一个键。
-- -------------------- ---- ------- ----- --------- - --- ---------- ----- ---- - --- ----- ---- - --- ------------------- ---------- --------------------------------- -- ---- --------------------------------- -- -----
删除键值对
与 Map
相似,我们可以使用 delete()
方法删除 WeakMap
中的键值对。
-- -------------------- ---- ------- ----- --------- - --- ---------- ----- ---- - --- ----- ---- - --- ------------------- ---------- ------------------- ---------- ----------------------- --------------------------------- -- ---------
总结
使用 Map
和 WeakMap
可以方便地存储键值对。在使用 Map
时,请记住,每个键都是唯一的,因此将相同的键多次设置为不同的值将覆盖之前的值。在使用 WeakMap
时,请记住,只有对象才能作为键,并且键被保存为弱引用,因此如果一个键不再被引用,它将被垃圾回收。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6483e1e748841e989431ac6d