js中map用于存储键值对,支持任意类型键(对象、函数、symbol等),保持插入顺序;通过new map()创建,可用二维数组初始化;提供set/get/has/delete等明确方法操作数据,并原生支持for...of等遍历方式。

JS 中用 Map 存储键值对集合,核心是创建实例后调用 set() 方法添加数据,它比普通对象更灵活——支持任意类型作键(如对象、函数、Symbol),且保持插入顺序。
创建和初始化 Map
用 new Map() 创建空映射;也可传入可迭代对象(如二维数组)直接初始化:
const map1 = new Map(); // 空 Map
const map2 = new Map([
['name', 'Alice'],
[42, 'answer'],
[{id: 1}, 'object-key']
]);
- 数组中的每个子数组必须是
[key, value]形式 - 键可以是对象、函数、NaN、Symbol 等,不会被强制转为字符串
- 重复键会被后一个覆盖(与 Set 行为一致)
增删查改基本操作
Map 提供明确的方法名,语义清晰,避免对象属性操作的歧义:
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
map.set('age', 30); // 添加或更新
map.get('age'); // 获取值 → 30
map.has('age'); // 判断是否存在 → true
map.delete('age'); // 删除 → true(成功返回 true)
map.clear(); // 清空全部
-
get()找不到时返回undefined,不抛错 -
has()比get() !== undefined更安全,尤其值本身可能是undefined -
delete()返回布尔值,便于判断是否真删掉了
遍历 Map 的多种方式
Map 原生可迭代,支持 for...of、解构、扩展运算符等现代语法:
// 方式1:遍历 [key, value] 对
for (const [k, v] of map) {
console.log(k, v);
}
// 方式2:只取键或值
for (const k of map.keys()) { ... }
for (const v of map.values()) { ... }
// 方式3:转成数组处理
Array.from(map); // [[k1,v1], [k2,v2]]
[...map.entries()]; // 同上
Object.fromEntries(map); // 转为普通对象(仅当键为字符串/数字时安全)
- 遍历时顺序严格按插入顺序,不依赖键的类型或字典序
-
Object.fromEntries()是反向转换的安全方式,比JSON.stringify+parse更可靠 - 避免用
map.forEach()处理异步逻辑,因无法break或return中断
Map 和普通对象的区别要点
选 Map 还是对象?关键看需求:
- 需要非字符串/数字作键 → 必选
Map - 频繁增删、关注插入顺序 →
Map更合适 - 仅静态配置、需 JSON 序列化、要原型方法(如
toString)→ 用对象 - 性能敏感场景(如百万级数据)→ 实测为准,小数据量差异可忽略
Map 不是对象的替代品,而是补充。该用哪个,取决于键的类型、操作模式和语义意图。










