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


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 不强调顺序访问,也不提供索引。常见误区:

MCP市场 MCP市场

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

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

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

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

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

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

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


# javascript  # es6  # 的是  # 转成  # 有什么区别  # 如何使用  # 不能用  # 也不  # 如何用  # 键值  # 键值对  # 区别  # proxy  # java  # 如何实现  # 新乡关键词排名技术优化  # 网站首页怎么优化推广  # 异地网站建设实战经历  # 信息网站建设什么价格  # 海沧网站建设是否有补助  # 西安企业网站优化  # 数字营销推广实操心得体会  # 黄浦区教育营销推广  # 山西特色关键词排名项目  # 信息化智能营销推广哪个好  # 都是 


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


相关推荐: 铁路12306入口 铁路12306官网版入口登录网址  在Django中动态检查模型关联:一种灵活的解决方案  荣耀Magic7拍照夜景噪点处理_荣耀Magic7相机优化  Composer如何使用composer-plugin-api开发自定义插件  126邮箱申请入口官网_126邮箱注册免费登录2025  163邮箱网页版入口 163邮箱在线使用  如何定制PrimeNG Sidebar的背景颜色  TikTok视频播放中断怎么办 TikTok播放异常修复方法  J*aScript装饰器_元编程实战  英雄联盟争者留名活动介绍  苹果SE如何开启单手模式_苹果SE单手操作功能  美发店速赢秘籍  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  如何在CSS中使用过渡制作按钮边框渐变_border-color transition实现  Dash应用中自定义HTML页面标题与网站图标(F*icon)的实用指南  Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合  iPhone14无法连接蓝牙设备如何解决  微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】  英国搜索:多数英国人认为语言搜索是未来搜索  创客贴登录页面入口 创客贴网页版最新网址链接  抖音怎么解除第三方绑定_抖音解除第三方平台绑定方法介绍  mysql归档数据怎么导出为csv_mysql归档数据导出为csv文件的方法  Python中对象引用与链表属性赋值的机制解析  b站怎么用微信登录_b站微信登录方法  荣耀盒子应用管理技巧  CSS布局中意外顶部空白的调试与解决:深入理解padding-top  如何查询国外邮政编码_国外邮政编码查询的多种有效途径  12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案  word怎么将图片设置为页面背景并不影响打印_Word图片背景设置方法  免费占卜在线神算_免费占卜手机神算  消除网页顶部意外空白线:CSS布局常见问题与解决方案  Mac如何开启画中画模式_Mac Safari浏览器视频画中画功能  店铺如何做视频号推广?做视频号推广有用吗?  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  暴风影音官网正式版_暴风影音手机版官网下载安卓  CSS如何控制元素外边距_margin实现布局间隔  Mac hosts文件在哪里_Mac修改hosts文件详细教程  优化长HTML属性值:SonarQube警告与实用策略  b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法  抖音作品被限流怎么办 抖音内容优化与流量恢复方法  《土豆雅思》修改密码方法  《i莞家》修改昵称方法  手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧  大众点评了却看不到是怎么回事  植物大战僵尸95版游戏版下载_植物大战僵尸95版游戏版安装指南  我的世界游戏平台入口 我的世界官方官网直达链接  QQ网页版入口导航 QQ网页版在线访问通道  J*aScript模块加载器_RequireJS原理分析  抖音商城官网是什么_抖音商城官方网址与访问方法  如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战 

 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.