讲师中心 微信公众号
AI工具推荐 视频效率加速

javascript map对象是什么_和普通对象有何不同【教程】

小磊小哥_9411

小磊小哥_9411

发布时间:2026-01-20 21:39:59

|

421人浏览过

|

来源于php中文网

原创

Map 与普通对象是本质不同的数据结构:键支持任意类型、无原型链、有确定插入顺序、提供 size/clear/has 等原生方法;而普通对象键仅限字符串/Symbol、存在类型强制转换、遍历顺序不完全可靠、操作更繁琐。

javascript map对象是什么_和普通对象有何不同【教程】

Map 对象不是“带下划线的普通对象”,它和 {} 是完全不同的数据结构,不能用点号访问、没有原型链继承、键可以是任意类型——这些差异直接影响你能不能正确存取数据。

Map 的键可以是任意值,而普通对象只能是字符串或 Symbol

普通对象的键会被强制转为字符串(比如 {[1,2]: 'a'} 实际上是 {'1,2': 'a'}),Map 则保留原始类型:

  • new Map().set({}, 'value') —— 用空对象作键,合法且可查
  • new Map().set(NaN, 'nan') —— NaN 作为键能被正确识别(普通对象里 obj[NaN] = 'x' 等价于 obj['NaN'] = 'x')
  • obj[123] 和 obj['123'] 指向同一个属性;map.get(123) 和 map.get('123') 是两个独立键

Map 有确定的插入顺序,普通对象在 ES2015 后才部分保证

遍历 Map 时,keys()、values()、entries() 都严格按插入顺序返回;普通对象的属性顺序虽然现在大多遵循插入顺序,但仍有例外:

  • 数字键(如 '1'、'10')会被提前排序,{'10':1,'1':2} 遍历时先输出 '1' 再 '10'
  • Symbol 键总在最后,字符串键在前,但具体行为依赖引擎实现
  • Map 不受这些干扰,map.set('a',1).set(2,3).set(Symbol(),4) 就按这个顺序迭代

Map 的 size、遍历、清空操作更直接,普通对象要手动处理

普通对象没有原生 size 属性,也不能直接 clear(),常用写法容易出错:

java-api-doc-generator
java-api-doc-generator

分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。

下载

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

const obj = { a: 1, b: 2 };
console.log(Object.keys(obj).length); // ✅ 得到 2,但要遍历一次
obj = {}; // ❌ 重赋值不改变原引用,其他地方仍持有旧对象
Object.keys(obj).forEach(k => delete obj[k]); // ✅ 但性能差、不可靠(可能跳过不可枚举属性)

const map = new Map();
map.set('a', 1).set('b', 2);
console.log(map.size); // ✅ 直接读取,O(1)
map.clear(); // ✅ 原地清空,无引用残留
  • map.has(key) 比 key in obj 或 obj.hasOwnProperty(key) 更准确(不涉及原型链)
  • for (const [k, v] of map) 可直接解构,for...in 遍历对象会包含继承属性
  • 没有 map.toJSON(),要转 JSON 得手动 Array.from(map) 或 [...map]

Map 不是语法糖,不能替代对象做配置或 DOM 属性映射

如果你只是存字符串键、不需要弱引用、也不关心键类型,用 {} 更轻量、可读性更好。Map 的开销明显更高:

  • 每个 Map 实例都带额外内存结构,初始化比空对象慢约 3–5 倍
  • V8 中 Map 查找复杂度平均 O(1),但常数项比对象高;小数据量(
  • 不能用点号或方括号语法直接访问:map.key 或 map['key'] 总是 undefined,必须用 map.get(key)
  • JSON 序列化不支持 Map,JSON.stringify(new Map([['a',1]])) 得到 '{}'

真正该用 Map 的场景很明确:需要非字符串键、依赖插入顺序、频繁增删且关注性能一致性。其余时候,别为了“新”而换——尤其当团队成员还在用 for...in 遍历对象时,Map 的 for...of 会悄悄漏掉逻辑。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2195

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3482

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1176

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4019

2025.09.10

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2298

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1818

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2884

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6204

2023.10.24

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.7万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn