首页 > web前端 > js教程 > 正文

javascript中的Map和Set是什么_它们与对象和数组有什么区别

狼影
发布: 2025-12-14 21:57:16
原创
182人浏览过
Map用于存储任意类型键的键值对,Set用于存储唯一值;二者弥补对象和数组在语义、功能与性能上的不足,不可互相替代。

javascript中的map和set是什么_它们与对象和数组有什么区别

Map 和 Set 是 ES6 引入的两种原生集合类型,各自有明确的设计目的:Map 用来存键值对,Set 用来存唯一值。它们不是对象或数组的替代品,而是补足了后两者在语义、功能和性能上的短板。

Map 是带任意键的键值映射

Map 的核心是「键 → 值」的一对一关系,但它的键可以是任何类型——字符串、数字、布尔、null、undefined、Symbol,甚至对象或函数。这和普通对象有本质区别

  • 对象的键只能是字符串或 Symbol(其他类型会自动转成字符串,比如 {[1]: 'a'} 实际变成 {'1': 'a'}
  • Map 保留原始键类型,map.set({}, 'val') 中的空对象就是独立的键,不会被混淆
  • Map 有 .size 属性,不用遍历就能知道有多少条记录;对象得靠 Object.keys(obj).length
  • Map 按插入顺序迭代,对象的属性顺序在旧引擎中不保证(虽现代已基本稳定,但语义上仍不承诺)
  • Map 提供 .has().delete().clear() 等统一方法,对象操作得靠 indelete、循环等零散手段

Set 是自动去重的值集合

Set 存的不是键值对,而是一组互不重复的值,类似数学里的集合。它解决的是“我只要这个值是否存在”,而不是“这个值对应什么”:

  • 添加重复值无效:new Set([1, 1, 2]) 结果是 {1, 2}
  • 判断存在用 .has(),比数组 .includes().indexOf() !== -1 更快(底层是哈希查找,平均 O(1))
  • 不能用下标访问(没有 set[0]),也不支持索引操作;想取值得转成数组或用迭代器
  • Set 的值可以是任意类型,包括对象,但注意:set.has({}) 总是 false,因为每次 {} 都是新对象,地址不同;要用同一个引用才匹配

和数组比:不是“更高级的数组”,而是不同用途

数组适合有序、可重复、需索引访问的数据;Set 和 Map 不强调顺序访问,也不提供索引。常见误区:

来画数字人直播
来画数字人直播

来画数字人自动化直播,无需请真人主播,即可实现24小时直播,无缝衔接各大直播平台。

来画数字人直播 57
查看详情 来画数字人直播

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

  • 别用 Set 替代数组来存列表并按位置取值(比如 set[5] 不存在)
  • 数组去重写法 [...new Set(arr)] 简洁有效,但这只是 Set 的一个用法,不是它的全部意义
  • 数组的 .push().splice() 等方法在 Set/Map 中没有对应,反之亦然

和对象比:语义清晰 + 功能完整

对象常被“借”来当键值容器,但容易出问题:

  • 原型链污染风险:obj.toString 可能被意外覆盖,Map 完全隔离
  • 无法直接表达“我要一个纯数据映射”,对象总带方法和继承痕迹
  • 对象不能用非字符串键(除非用 Symbol 或 Proxy 曲线救国),Map 天然支持
  • Set 相比 obj[key] = true 这种模拟集合的方式,更安全、更易读、更易做集合运算(交集、差集等)

基本上就这些。用对地方,代码会更稳、更短、更容易懂。

以上就是javascript中的Map和Set是什么_它们与对象和数组有什么区别的详细内容,更多请关注php中文网其它相关文章!

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

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

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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