0

0

JavaScript中Map键值对集合与Object的本质区别

冷漠man

冷漠man

发布时间:2026-03-18 16:53:08

|

484人浏览过

|

来源于php中文网

原创

Map 和 Object 本质不同:Object 是基础数据结构,键仅限字符串/Symbol;Map 是专用集合,键支持任意类型,使用 SameValueZero 比较,按插入顺序遍历,size 可直接获取,适合动态映射场景。

javascript中map键值对集合与object的本质区别

Map 和 Object 都能存储键值对,但它们在设计目标、底层机制和实际行为上有根本性差异——Object 是语言层面的“基础数据结构”,而 Map 是为高效、灵活的键值映射专门设计的集合类型

键的类型限制不同

Object 的键只能是字符串或 Symbol(即使传入数字、布尔值等,也会被自动转为字符串);Map 的键可以是任意类型,包括对象、函数、null、undefined,甚至另一个 Map 或 Set。

  • 例如:const obj = { true: 'yes' }; obj[true] === obj['true'] // true —— 布尔值被转成字符串
  • const map = new Map(); map.set(true, 'yes'); map.get(true) // 'yes' —— 键保持原始类型和身份

键的相等性判断逻辑不同

Object 使用抽象相等(==)+ 类型转换做属性访问,本质上依赖字符串化结果;Map 使用 SameValueZero 算法(类似 ===,但 NaN 等于 NaN),且对引用类型严格比对内存地址。

  • 两个内容相同的普通对象 {a:1}{a:1} 作为 Object 的键会互相覆盖;作为 Map 的键则被视为不同键,可同时存在
  • Map 中 map.set(NaN, 'nan'); map.get(NaN) // 'nan' 可正常工作;Object 中 obj[NaN] = 'nan'; obj[NaN] // undefined(因为 NaN.toString() === 'NaN',但多次设置会覆盖)

遍历与顺序保证不同

Object 的属性遍历顺序由 ECMAScript 规范明确约定(自 ES2015 起:先数字索引升序,再插入顺序的字符串键,最后 Symbol 键),但历史上混乱,且不直观;Map 明确保证按插入顺序遍历,语义清晰、可预测。

Hotpot AI Background Remover
Hotpot AI Background Remover

Hotpot.ai推出的图片背景移除工具

下载

立即学习Java免费学习笔记(深入)”;

  • Map 提供 keys()values()entries() 迭代器,天然支持 for...of 和扩展运算符;Object 需借助 Object.keys() 等静态方法,再手动迭代
  • Map 的 size 属性直接返回元素个数;Object 必须用 Object.keys(obj).length 计算,且无法包含不可枚举属性

性能与使用场景倾向不同

Object 在属性访问上经过高度优化(尤其对于已知结构的“字面量对象”),V8 等引擎有内联缓存等机制;Map 在频繁增删、键类型复杂、需稳定遍历顺序时更可靠,且动态操作(如 clear、forEach)接口更统一。

  • 高频更新键值对(如缓存、计数器)、键不确定为字符串时,优先选 Map
  • 表示实体结构(如用户信息 {name: 'Alice', age: 30})、配置项、JSON 兼容场景,Object 更自然、轻量、可序列化
  • 需要监听变化(如响应式系统)时,Map 的弱引用变体 WeakMap 更适合持有私有元数据,避免内存泄漏

本质不是谁“更好”,而是解决不同问题:Object 是通用容器兼语法糖,Map 是专注键值映射的数据结构。选哪个,取决于你是在建模型,还是在做映射。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

358

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

225

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

138

2026.02.12

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

77

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

41

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

47

2025.11.27

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

109

2026.03.17

多环境下的 Nginx 安装、结构与运维实战
多环境下的 Nginx 安装、结构与运维实战

本专题聚焦多环境下Nginx实战,详解开发、测试及生产环境的差异化安装策略与目录结构规划。深入剖析配置模块化设计、灰度发布流程及跨环境同步机制。结合监控告警、故障排查与自动化运维工具,提供全链路管理方案,助力团队构建灵活、高可用的Nginx服务体系,从容应对复杂业务场景挑战。

13

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6.2万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号