JavaScript中Set是什么,如何存储唯一值
时间:2026-04-01 22:37:16 331浏览 收藏
JavaScript中的Set是一个轻量且语义清晰的内置集合对象,专为高效存储唯一值而设计——它利用SameValueZero算法智能识别相等性(如+0与-0、NaN与NaN均视为相同),支持任意类型数据(包括对象、函数、undefined等),但对象按引用判重;通过add、has、delete和size等简洁API实现增删查操作,并成为数组去重最优雅的解决方案(如[...new Set(arr)]);与Map和Object不同,Set不涉及键值对,纯粹聚焦于“值的唯一性”,是处理去重、成员管理及集合运算的理想选择。

JavaScript Set 是一个内置对象,用来存储唯一值的集合。它不关心值的类型,可以存放数字、字符串、对象、函数,甚至 undefined 和 null,但同一个值在 Set 中只会出现一次——重复添加会被自动忽略。
Set 如何保证值的唯一性
Set 使用“SameValueZero”算法判断两个值是否相等(和 === 类似,但有个关键区别:+0 和 -0 被视为相等,NaN 和 NaN 也被视为相等)。这意味着:
new Set([0, -0, 0])实际只存一个0new Set([NaN, NaN])实际只存一个NaN(而普通数组或对象无法这样识别 NaN)new Set([{}, {}])会存两个对象,因为它们是不同引用(即使内容相同)
Set 的基本用法
创建 Set 后,常用方法有 add()、has()、delete() 和 size 属性:
const s = new Set([1, 2, 2, 3])→s.size是3s.add(2)不改变内容,s.size仍为3s.has(2)返回true;s.delete(2)成功后返回true
Set 和数组去重的常见配合
利用 Set 构造器能快速去重数组:
[...new Set([1, 2, 2, 3])]→[1, 2, 3]Array.from(new Set(arr))效果相同,适合需要调用其他 Array 方法的场景- 注意:Set 不支持直接索引访问(如
s[0]),要遍历请用for...of、forEach或展开运算符
Set 与 Object / Map 的关键区别
Set 存的是“值”,不是“键值对”:
- 没有键的概念,所以不能像 Map 那样用
get(key)取值 - 不能用字符串 key 索引,也不提供默认迭代顺序以外的查找方式(不像 Object 的属性名)
- 如果需要“唯一键 + 对应值”,应该选
Map;如果只需“一堆不重复的值”,Set 更轻量、语义更清晰
以上就是《JavaScript中Set是什么,如何存储唯一值》的详细内容,更多关于的资料请关注golang学习网公众号!
相关阅读
更多>
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
最新阅读
更多>
-
439 收藏
-
216 收藏
-
402 收藏
-
209 收藏
-
208 收藏
-
456 收藏
-
365 收藏
-
185 收藏
-
283 收藏
-
102 收藏
-
428 收藏
-
237 收藏
课程推荐
更多>
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习