Map不是替代对象,而是解决对象键只能是字符串或Symbol的根本限制;它支持任意类型作键且不隐式转换,保持键的原始身份,具备size属性、插入顺序迭代和无原型干扰等优势。

JavaScript 中的 Map 并不是为了“替代”对象,而是为了解决对象作为键值容器时的**根本限制**:对象的键只能是字符串或 Symbol,而 Map 允许任意类型(包括对象、函数、NaN、甚至其他 Map)作为键。
对象的键会被自动转成字符串
这是最核心的区别。当你用一个对象、数组或数字作为对象的属性名时,JavaScript 会强制调用 .toString() 转成字符串:
const obj = {};
const key1 = { id: 1 };
const key2 = [1, 2];
obj[key1] = 'a';
obj[key2] = 'b';
console.log(obj);
// { '[object Object]': 'b', '[object Array]': 'b' }
// 注意:key1 和 key2 都变成了字符串,且 key1 被 key2 覆盖了(因为都转成 '[object Object]' 或类似)
登录后复制
这意味着你无法真正区分两个不同的对象作为键 —— 它们一旦当属性名使用,就失去了身份。
Map 的键保持原样,支持任意类型
Map 不做隐式转换,它用严格相等(===)判断键是否相同,且允许:
标签: javascript java 工具 区别 键值对 隐式转换 为什么
还木有评论哦,快来抢沙发吧~