Map核心在于支持任意类型键(含对象、函数、Symbol)且键值对有序可迭代;set添加/更新键值对并支持链式调用,get按引用严格相等获取值,has高效判断键存在性。

JS 中用 Map 的 set、get 和 has 方法操作数据,核心是理解它和普通对象的区别:Map 允许任意类型作键(包括对象、函数、Symbol),且键值对有序、可迭代。
用 set 存储键值对
set(key, value) 用于添加或更新一个键值对。如果键已存在,则覆盖原值;返回 Map 实例本身,支持链式调用。
- 键可以是字符串、数字、布尔值、null、undefined、对象、函数、Symbol 等
- 重复调用
set同一键,会更新值,不会新增条目 - 示例:
const map = new Map();<br> map.set('name', 'Alice');<br> map.set({id: 1}, 'user-1');<br> map.set(true, 'yes').set(42, 'answer'); // 链式调用
用 get 获取对应值
get(key) 返回指定键对应的值;若键不存在,返回 undefined(不是抛错)。
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
- 注意:键的比较使用严格相等(
===),但对对象和函数是引用比较 - 例如:
map.get({id: 1})返回undefined,因为这是新对象,和之前set时的对象引用不同 - 正确写法:
const userKey = {id: 1};<br> map.set(userKey, 'user-1');<br> console.log(map.get(userKey)); // 'user-1'
用 has 判断键是否存在
has(key) 返回布尔值,表示 Map 是否含有该键(不查值,只判断键是否存在)。
- 比
get(key) !== undefined更语义清晰、性能略优 - 适用于条件逻辑,比如避免无效读取
if (map.has('score')) {<br> console.log('得分:', map.get('score'));<br> } - 注意:
has对未定义键也安全,不会出错
小提醒:别和 Object 混用
Map 不是 Object 的替代品,而是补充:
- 需要动态增删、遍历顺序重要、键类型复杂时,优先用 Map
- 仅需字符串键、要 JSON 序列化、或需原型方法时,Object 更合适
- Map 的 size 是属性(
map.size),Object 要靠Object.keys(obj).length

















