J*aScript中的Map和Set是什么_它们与对象和数组有何不同?


Map和Set是ES6引入的专用集合类型:Map支持任意类型键、按插入顺序遍历、size只读;Set自动去重、O(1)查找、提供原生集合操作;二者补足对象(键类型受限、无序)和数组(无唯一性保障、查找低效)的短板。

javascript中的map和set是什么_它们与对象和数组有何不同?

Map 和 Set 是 ES6 引入的两种内置集合类型,专为高效存储键值对(Map)和唯一值(Set)而设计;它们和对象、数组的核心区别在于数据结构目标、键的类型支持、遍历顺序保证以及内置方法语义更明确。

Map:带完整键类型支持的有序键值容器

Map 允许任意类型(包括对象、函数、Symbol 甚至 null)作为键,而普通对象的键只能是字符串或 Symbol(且会自动转为字符串)。Map 严格按插入顺序迭代,不会受属性名排序规则干扰(比如数字键会被对象自动排序,Map 不会)。

  • new Map() 创建,通过 set(key, value) 添加,get(key) 获取,has(key) 判断存在性
  • 支持直接获取大小:map.size(对象需用 Object.keys(obj).length
  • 遍历时保持插入顺序:for (const [key, val] of map)map.forEach()
  • 适合缓存、映射关系管理、需要动态键类型的场景(例如把 DOM 元素当键存状态)

Set:自动去重、只存值的有序集合

Set 存储的是唯一值(根据 SameValueZero 规则判断相等),不关心“键”,只关注“有没有”。它不是数组的替代品,而是用来快速查重、求交/并/差集的工具。数组需要手动 filter()includes() 去重,效率低且逻辑分散。

  • new Set([1,2,2,3]) 初始化后自动去重 → {1,2,3}
  • 增删查都是 O(1) 平均时间复杂度(底层哈希实现),比数组 indexOfincludes 快得多
  • 提供原生集合操作:set1.has(x)set1.add(x)set1.delete(x)
  • 可轻松实现数组去重:[...new Set(arr)],或求差集:[...setA].filter(x => !setB.has(x))

与对象(Object)的关键差异

对象本质是键值对集合,但被设计成通用数据载体,不是专用集合。它的原型链、默认属性(如 toString)、键自动转字符串、无序遍历(ES2015+ 数字键升序、其余按插入序)等特性,让它在做“映射”时容易出错。

MCP市场 MCP市场

中文MCP工具聚合与分发平台

MCP市场 211 查看详情 MCP市场
  • 对象不能用对象作键:obj[{}] = 'a' 实际上是 obj['[object Object]'] = 'a'
  • 无法可靠获取属性数量,也不能直接遍历所有键值对(需过滤原型链属性)
  • Map 没有原型污染风险,map.get 不会误匹配继承方法名(比如不会把 'constructor' 当有效键)
  • JSON 序列化天然支持对象,但不支持 Map/Set —— 需手动转换

与数组(Array)的关键差异

数组是索引驱动的有序列表,核心能力是按位置存取;Map 和 Set 关注的是“关联性”和“唯一性”,不是下标。

  • 数组允许重复值,Set 天然拒绝重复;Map 的 key 也必须唯一,但 value 可重复
  • 数组查找某值需遍历(O(n)),Set 查找是 O(1);Map 按键查找也是 O(1),对象查属性接近 O(1),但受限于键类型
  • 数组有大量基于索引的方法(pushslicemap),Map/Set 提供的是集合语义方法(adddeleteentries
  • 数组长度可读可写,Map/Set 的 size 是只读属性,更符合集合不变性直觉

基本上就这些。Map 和 Set 不是为了取代对象和数组,而是补足它们在特定场景下的短板——当你需要“任意键”“强唯一性”“稳定顺序”或“清晰语义”时,它们就是更合适的选择。

以上就是J*aScript中的Map和Set是什么_它们与对象和数组有何不同?的详细内容,更多请关注其它相关文章!


# javascript  # es6  # 有何不同  # 的是  # 数据结构  # 如何实现  # 键值  # 遍历  # 键值对  # 区别  # 工具  # json  # js  # java  # 宝安公司外贸网站建设  # 交城哪里有网站推广的公司  # 防水推广网站怎么注册的  # 装饰网站建设服务  # 佛山网站推广方式有哪些  # 罗湖国内网站优化怎么做  # 建设网站 英语  # 昆明营销推广策划  # 木马网站建设工程  # 蚌埠网站建设推广方法  # 数字键  # 基本原理  # 可选  # 几种 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: mysql通配符能用于日志查询吗_mysql通配符在系统日志查询中的实际使用方法  高德地图怎么查看未来行程规划_高德地图未来行程规划查看方法  如何查询国外邮政编码_国外邮政编码查询的多种有效途径  2025SNH48年度青春盛典门票价格及购买方式  4399造梦西游3无敌版_4399游戏入口  《糖豆》添加舞曲方法  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  12306售票时间最新规定 | 网上订票和车站窗口时间一样吗  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  如何使用 composer 和 aop-php 实现 AOP 编程?  qq邮箱怎么注册_QQ邮箱注册步骤与注意事项  Python实战:高效处理实时数据流中的最小/最大值  漫蛙漫画直连入口 _ manwa官方备用入口实时检测  mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法  雨课堂官网在线登录 网页版雨课堂登录链接  Golang如何初始化module项目_Golang module init使用说明  鸣潮历史学家灯塔位置一览  MacBook Pro词典使用指南  菜鸟驿站的取件码忘了怎么办 手机快速查询指南  深入理解随机递归函数的确定性:内部节点、叶节点与时间复杂度分析  OPPO A3 WiFi频繁断开怎么办 OPPO A3网络优化技巧  使用jQuery精确检测除指定元素外任意位置的点击事件  Go反射进阶:访问内嵌结构体中的被遮蔽方法  修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现  海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接  《鹿路通》退余额方法  学习通网页版课程打不开_课程无法访问时的解决方法  在VS Code中进行数据科学和机器学习开发  悟空浏览器网页版链接 悟空浏览器网页版最新有效地址  花生壳内网映射新方案  Golang如何实现HTTP请求重试机制_Golang HTTP请求错误处理策略  《兴业银行》注册登录方法  Retrofit根路径POST请求:@POST("/") 的应用与解析  《东方航空》添加乘机人方法  解决CSS容器溢出问题:使用calc()实现精确布局与边距控制  macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整  PHP与SQL实践:高效实现数据复制与特定列值修改  江苏大剧院会员卡购买步骤  汽水音乐车机版 汽水音乐车机版官方入口  iPhone12是否要更新ios16  Python项目中的条件导入:解决跨模块依赖问题  mysql如何配置从库只读_mysql从库只读设置方法  实现二叉树的层序插入:基于树大小的路径导航  Mac怎么关闭按键声音_Mac键盘打字音效设置  追剧达人如何发弹幕  PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略  百度网盘如何设置上传限额  邮编号码查询app有哪些_邮编号码查询推荐app及使用体验  J*aScript对象中深度嵌套URL键的查找与更新策略  抖音火山版如何进行提现 

 2025-12-14

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.