JavaScript 中的 Map 是一种用于存储键值对的集合,它与传统的对象(Object)类似,但提供了更丰富的功能和灵活性。以下是 Map 相关的主要知识点:
1. 基础概念
- 键值对存储:
Map使用键值对的形式存储数据,任何值(对象或基本类型)都可以作为键或值,而对象的键只能是字符串或符号。 - 有序性:
Map中的键值对是按插入顺序排列的,这意味着遍历Map时会按添加顺序返回键值对。 - 键的类型:在
Map中,键可以是任何类型,包括对象、函数、甚至是undefined和NaN。
2. 创建与初始化
- 创建空的
Map:const map = new Map(); - 使用二维数组初始化
Map:const map = new Map([['key1', 'value1'],['key2', 'value2'] ]);
3. 基本操作
- 设置键值对:使用
set方法添加或更新键值对。map.set('key', 'value'); - 获取值:使用
get方法根据键获取对应的值。如果键不存在,则返回undefined。const value = map.get('key'); - 检查键是否存在:使用
has方法检查Map中是否存在某个键。const hasKey = map.has('key'); - 删除键值对:使用
delete方法删除某个键值对,成功删除返回true,否则返回false。const success = map.delete('key'); - 清空
Map:使用clear方法清空所有键值对。map.clear();
4. 遍历 Map
- 遍历键值对:可以使用
for...of循环、forEach方法或直接通过迭代器遍历Map中的键值对。// 使用 for...of for (let [key, value] of map) {console.log(`${key}: ${value}`); }// 使用 forEach map.forEach((value, key) => {console.log(`${key}: ${value}`); }); - 获取键、值或键值对的迭代器:
const keys = map.keys(); // 获取所有键的迭代器 const values = map.values(); // 获取所有值的迭代器 const entries = map.entries(); // 获取所有键值对的迭代器
5. 属性与方法
- 大小 (
size):size属性返回Map中键值对的数量。const size = map.size; MapvsObject:Map允许非字符串类型的键,而Object的键只能是字符串或符号。Map保持键值对的插入顺序,Object没有顺序。Map的原型上没有默认的方法或属性,不会像Object那样继承原型链上的属性。
6. 常见用例
- 对象作为键:可以使用对象作为键来存储复杂的数据结构。
const objKey = { id: 1 }; const map = new Map(); map.set(objKey, 'Some value'); console.log(map.get(objKey)); // 'Some value'
7. WeakMap
WeakMap:类似于Map,但其键必须是对象,并且键对值的引用是弱引用,这意味着如果没有其他引用,键值对会被垃圾回收。WeakMap不支持迭代。
总结起来,Map 在需要高效、有序地存储和检索键值对,且键可以是任意类型时,是比 Object 更为合适的数据结构。