在ES6中,Map 对象是一种新的数据结构,它可以存储键值对,并能够高效地进行增、删、改、查等操作。在前端开发中,Map 对象为我们提供了一种更加灵活和高效的数据存储与处理方式。
Map 对象的基本用法
Map 对象的基本用法和普通的对象一样,我们可以使用new
关键字来创建一个 Map 对象,如下所示:
let myMap = new Map();
Map 对象也支持传入可迭代的对象作为参数来初始化,如下所示:
let myMap = new Map([ ["name", "Tom"], ["age", 20], ["gender", "male"] ]);
这里我们使用了一个二维数组来表示键值对的集合,数组的每一项分别表示键和值。
Map 对象的 set() 方法可以用来添加键值对,如下所示:
let myMap = new Map(); myMap.set("name", "Tom"); myMap.set("age", 20); myMap.set("gender", "male");
Map 对象的 get() 方法可以用来获取指定键的值,如下所示:
let myMap = new Map([ ["name", "Tom"], ["age", 20], ["gender", "male"] ]); let name = myMap.get("name"); // "Tom" let age = myMap.get("age"); // 20 let gender = myMap.get("gender"); // "male"
Map 对象的 has() 方法可以用来判断指定键是否存在,如下所示:
let myMap = new Map([ ["name", "Tom"], ["age", 20], ["gender", "male"] ]); let hasName = myMap.has("name"); // true let hasEmail = myMap.has("email"); // false
Map 对象的 delete() 方法可以用来删除指定键,如下所示:
let myMap = new Map([ ["name", "Tom"], ["age", 20], ["gender", "male"] ]); myMap.delete("name"); let hasName = myMap.has("name"); // false
除了上述基本操作外,Map 对象还支持多种其他高级操作,如遍历、获取长度等等。
Map 对象的高级用法
遍历
Map 对象支持 for...of 循环来遍历键值对,如下所示:
let myMap = new Map([ ["name", "Tom"], ["age", 20], ["gender", "male"] ]); for(let [key, value] of myMap) { console.log(`${key} = ${value}`); }
输出结果如下:
name = Tom age = 20 gender = male
Map 对象还提供了 keys()、values() 和 entries() 方法,它们分别可以用来获取键的集合、值的集合和键值对的集合,如下所示:
let myMap = new Map([ ["name", "Tom"], ["age", 20], ["gender", "male"] ]); let keys = myMap.keys(); // 返回键的集合 let values = myMap.values(); // 返回值的集合 let entries = myMap.entries(); // 返回键值对的集合
设置默认值
Map 对象的 get() 方法在获取不存在的键时会返回 undefined,我们可以使用 setDefault() 方法来设置默认值,如下所示:
let myMap = new Map(); myMap.setDefault("name", "Tom"); myMap.setDefault("age", 20); myMap.setDefault("gender", "male"); let name = myMap.get("name"); // "Tom" let email = myMap.get("email"); // 默认返回 undefined
WeakMap 对象
Map 对象的一项功能就是存储键值对,但是当某个键不再被引用时,对应的值也不会自动释放。这时候我们可以使用 WeakMap 对象来解决问题,WeakMap 对象的键是弱引用的,当某个键不再被引用时,它对应的值也会被自动释放。
使用方法与 Map 对象基本一致,只是需要使用 WeakMap 替换 Map,示例如下:
let myWeakMap = new WeakMap(); let obj1 = { name: "Tom" }; let obj2 = { age: 20 }; let obj3 = { gender: "male" }; myWeakMap.set(obj1, "Tom"); myWeakMap.set(obj2, 20); myWeakMap.set(obj3, "male");
总结
Map 对象是 ES6 中的一种新型数据结构,它支持存储键值对,并且提供了高效的增、删、改、查等操作。Map 对象的高级用法包括遍历、设置默认值和使用 WeakMap 对象。在实际前端开发中,Map 对象为我们提供了一种更加灵活和高效的数据存储与处理方式。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a4cadcadd4f0e0ffd2114f