在前端开发中,JavaScript 是不可或缺的一部分。随着 ES6 和 ES7 的推出,JavaScript 语言得到了很大的提升和改进。其中,Map 和 WeakMap 是 ES6 和 ES7 中新增的两个数据结构,它们能够更好地满足我们在实际开发中的需求。本文将详细介绍 Map 和 WeakMap 的使用方法,并提供示例代码,帮助读者更好地掌握这两个数据结构。
Map
Map 是一种键值对的集合,其中的每个键和值都可以是任意类型的数据。Map 的键和值可以是对象、数组、字符串、数字等类型的数据,而且键和值之间是一一对应的关系。Map 中的元素是按照插入顺序排序的,所以可以通过遍历 Map 来获取它的元素。Map 中的元素也可以通过键来获取,如果键不存在,则返回 undefined。
创建 Map
可以通过以下方式来创建一个 Map:
const map = new Map();
添加元素
可以通过 set() 方法向 Map 中添加元素。set() 方法接收两个参数,第一个参数是键,第二个参数是值。如果键已经存在,则会更新对应的值。
map.set('name', 'John'); map.set('age', 25); map.set('gender', 'male');
获取元素
可以通过 get() 方法来获取 Map 中的元素。get() 方法接收一个参数,即键,返回对应的值。如果键不存在,则返回 undefined。
const name = map.get('name'); console.log(name); // John
删除元素
可以通过 delete() 方法来删除 Map 中的元素。delete() 方法接收一个参数,即键。如果键存在,则删除对应的元素,并返回 true;如果键不存在,则返回 false。
const result = map.delete('age'); console.log(result); // true
遍历元素
可以通过 for...of 循环来遍历 Map 中的元素。for...of 循环会遍历 Map 中的键值对,每次循环返回一个数组,数组的第一个元素是键,第二个元素是值。
for (const [key, value] of map) { console.log(key + ' = ' + value); }
示例代码
下面是一个使用 Map 的示例代码,它实现了一个计数器,可以统计字符串中每个字符出现的次数:
-- -------------------- ---- ------- -------- -------------------- - ----- --- - --- ------ --- ------ ---- -- ---- - -- --------------- - ------------- ------------- - --- - ---- - ------------- --- - - ------ ---- - ----- ------ - ---------------------- -------- --------------------
输出结果为:
-- -------------------- ---- ------- ------ - --- -- -- --- -- -- --- -- -- --- -- -- - - -- -- --- -- -- --- -- -- --- -- - -
WeakMap
WeakMap 也是一种键值对的集合,但是它的键必须是对象。WeakMap 中的键是弱引用的,也就是说,如果键所引用的对象被垃圾回收了,那么这个键也会自动从 WeakMap 中被删除。WeakMap 中的值可以是任意类型的数据。
创建 WeakMap
可以通过以下方式来创建一个 WeakMap:
const weakMap = new WeakMap();
添加元素
可以通过 set() 方法向 WeakMap 中添加元素。set() 方法接收两个参数,第一个参数是键,必须是对象,第二个参数是值。
const key = {}; weakMap.set(key, 'value');
获取元素
可以通过 get() 方法来获取 WeakMap 中的元素。get() 方法接收一个参数,即键,返回对应的值。如果键不存在,则返回 undefined。
const value = weakMap.get(key); console.log(value); // value
删除元素
由于 WeakMap 中的键是弱引用的,所以不需要手动删除元素。如果键所引用的对象被垃圾回收了,那么这个键也会自动从 WeakMap 中被删除。
示例代码
下面是一个使用 WeakMap 的示例代码,它实现了一个私有变量:
-- -------------------- ---- ------- ----- ----------- - --- ---------- ----- ------ - ----------------- - --------------------- - ---- --- - --------- - ------ --------------------------- - - ----- ------ - --- --------------- ------------------------------ -- ---- ------------------------------------- -- ---------
在这个示例代码中,我们使用 WeakMap 来存储私有变量。我们创建了一个类 Person,它有一个私有变量 name,我们使用 privateData 来存储这个私有变量。在 getName() 方法中,我们通过 this 来获取私有变量,并返回它的值。在外部,我们无法通过 privateData 来获取私有变量,因为 privateData 中的键是弱引用的,如果键所引用的对象被垃圾回收了,那么这个键也会自动从 WeakMap 中被删除。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d3f9c8a941bf71347874a0