新闻中心
j*ascript中的Map和Set是什么_它们与对象和数组有什么区别
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()等统一方法,对象操作得靠in、delete、循环等零散手段
Set 是自动去重的值集合
Set 存的不是键值对,而是一组互不重复的值,类似数学里的集合。它解决的是“我只要这个值是否存在”,而不是“这个值对应什么”:
- 添加重复值无效:
new Set([1, 1, 2])结果是{1, 2} - 判断存在用
.has(),比数组.includes()或.indexOf() !== -1更快(底层是哈希查找,平均 O(1)) - 不能用下标访问(没有
set[0]),也不支持索引操作;想取值得转成数组或用迭代器 - Set 的值可以是任意类型,包括对象,但注意:
set.has({})总是false,因为每次{}都是新对象,地址不同;要用同一个引用才匹配
和数组比:不是“更高级的数组”,而是不同用途
数组适合有序、可重复、需索引访问的数据;Set 和 Map 不强调顺序访
问,也不提供索引。常见误区:
美图AI开放平台
美图推出的AI人脸图像处理平台
111
查看详情
立即学习“J*a免费学习笔记(深入)”;
- 别用 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是什么_它们与对象和数组有什么区别的详细内容,更多请关注其它相关文章!
# es6
# 服务端
# 转成
# 有什么区别
# 表单
# 不能用
# 也不
# 键值
# 键值对
# 区别
# proxy
# java
# javascript
# 美图
# 太原网站建设考试热点
# 推广ip营销
# 技嘉mw21-SEO
# 微信网站建设乌鲁木齐
# 安徽seo推广打造公司
# 莆田移动端seo
# 温州手机seo
# 传媒推广素材网站大全最新
# 开封免费网站建设费用
# 重庆提升关键词排名
# 都是
# 的是
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
AO3访问入口汇总 AO3网页版同人作品一键直达
妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画
steam官方网页快速访问 steam账号注册全流程
网站内容防复制粘贴的实现策略与局限性
Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】
优化Django表单:提交验证失败后保留用户输入
天猫2025双十一0点秒杀攻略 天猫爆款抢购时间
漫蛙2漫画入口 漫蛙正版网页漫画直达网址
qq游戏手机版下载安装_qq游戏移动端入口
J*a里如何实现订单支付与库存同步功能_支付库存同步项目开发方法说明
Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】
VS Code远程开发时如何处理文件权限问题
J*a TimerTask中HashMap意外清空的深层原因与解决方案
mcjs网页版在线存档 mcjs云存档登录入口
汽水音乐在线版入口_汽水音乐网页播放手册
J*aScript生成器_j*ascript异步迭代
Golang如何实现状态模式管理对象状态_Golang State模式实现技巧
zookeeper 都有哪些功能?
c++ 获取系统当前时间 c++时间戳获取方法
如何提高微信支付的安全性_微信支付安全防护与设置建议
NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略
照顾宝贝2小游戏免费秒玩入口
Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接
Composer如何在生产环境安全地执行composer update
在Pyomo中实现基于变量的条件约束:Big-M方法详解
“音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!
微博网页版首页入口 微博电脑端官网登录链接
Spring Boot嵌入式服务器与J*a EE:功能支持深度解析
怎么在mac上运行html代码_mac运行html代码方法【指南】
在J*a中如何使用Stream.map转换元素_Stream映射操作解析
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案
CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题
Win11 BitLocker密码忘了怎么办 Win11找回BitLocker恢复密钥方法【解决】
Web Components中自定义开关组件状态同步的常见陷阱与解决方案
4399免费游戏网址入口 4399小游戏免费入口点开即玩
消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技
Yandex浏览器官方网页版入口 Yandex浏览器最新版官网
163邮箱登录密码 163邮箱忘记密码找回
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
SteamMachine定价或为699美元 大家想入手吗?
cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法
淘宝支付提示失败如何解决 淘宝支付流程优化方法
Excel Power Pivot如何处理XML数据源 构建高级数据模型
css滚动动画效果怎么实现_使用Animate.css滚动触发动画类
火锅吃太多会怎样 火锅吃太多会上火吗
微信客户端如何收红包_微信客户端接收红包使用教程
汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口


2025-12-14
浏览次数:次
返回列表