JavaScript Map详解
在 JavaScript 中,Map 是一种新的数据结构,用于存储键值对。相比于传统的 Object ,Map 提供了更强大和灵活的功能,适用于各种场景。
Map 的基本用法
Map 是通过构造函数 Map()
来创建的。可以直接将键值对作为参数传入构造函数,也可以使用 set()
方法来添加键值对。以下是创建和操作 Map 的基本示例:
// 创建一个空的 Map
let map = new Map();
// 使用 set() 方法添加键值对
map.set('name', 'Alice');
map.set('age', 30);
// 通过 get() 方法获取值
console.log(map.get('name')); // 输出:Alice
// 使用 has() 方法检查是否包含某个键
console.log(map.has('city')); // 输出:false
// 使用 delete() 方法删除键值对
map.delete('age');
// 使用 clear() 方法清空所有键值对
map.clear();
Map 的特性
1. 键可以是任意类型
在 Map 中,键可以是任意类型,包括原始类型(如字符串、数字)、对象和函数等。这一特性使得 Map 更加灵活,可以应对更多种类的数据结构。
let map = new Map();
let obj = {};
let func = function() {};
map.set('string', 'Hello');
map.set(42, 'World');
map.set(obj, 'Object');
map.set(func, 'Function');
console.log(map.get('string')); // 输出:Hello
console.log(map.get(42)); // 输出:World
console.log(map.get(obj)); // 输出:Object
2. 可迭代
Map 是可迭代的,可以使用 for...of
循环遍历其中的键值对。
let map = new Map();
map.set('name', 'Bob');
map.set('age', 25);
map.set('city', 'New York');
for (let [key, value] of map) {
console.log(key, value);
}
// 输出:
// name Bob
// age 25
// city New York
3. 大小可动态变化
Map 的大小是动态变化的,可以根据需求随时添加或删除键值对,而不需要提前声明容量。这与传统的数组或对象相比更加方便。
let map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);
console.log(map.size); // 输出:3
map.delete('b');
console.log(map.size); // 输出:2
map.clear();
console.log(map.size); // 输出:0
Map 的常用方法
1. set(key, value)
用于向 Map 中添加键值对,如果 Map 中已存在相同的键,则会覆盖原有的值。
let map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);
console.log(map.get('b')); // 输出:2
map.set('b', 4);
console.log(map.get('b')); // 输出:4
2. get(key)
用于获取指定键对应的值,如果 Map 中不存在该键,则返回 undefined
。
let map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);
console.log(map.get('b')); // 输出:2
console.log(map.get('d')); // 输出:undefined
3. has(key)
用于检查 Map 中是否包含指定的键,返回布尔值。
let map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);
console.log(map.has('b')); // 输出:true
console.log(map.has('d')); // 输出:false
4. delete(key)
用于删除 Map 中指定的键值对,删除成功返回 true
,否则返回 false
。
let map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);
map.delete('b');
console.log(map.has('b')); // 输出:false
5. clear()
用于清空 Map 中的所有键值对。
let map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);
map.clear();
console.log(map.size); // 输出:0
总结
Map 是 JavaScript 中一种强大而灵活的数据结构,适用于存储键值对的场景。