JavaScript Set 是用于存储唯一值的内置对象,使用SameValueZero算法判断相等性(+0与-0、NaN与NaN均视为相等),支持任意类型值但对象按引用区分,提供add、has、delete及size等方法,常用于数组去重。

JavaScript Set 是一个内置对象,用来存储唯一值的集合。它不关心值的类型,可以存放数字、字符串、对象、函数,甚至 undefined 和 null,但同一个值在 Set 中只会出现一次——重复添加会被自动忽略。
Set 如何保证值的唯一性
Set 使用“SameValueZero”算法判断两个值是否相等(和 === 类似,但有个关键区别:+0 和 -0 被视为相等,NaN 和 NaN 也被视为相等)。这意味着:
-
new Set([0, -0, 0])实际只存一个0 -
new Set([NaN, NaN])实际只存一个NaN(而普通数组或对象无法这样识别 NaN) -
new Set([{}, {}])会存两个对象,因为它们是不同引用(即使内容相同)
Set 的基本用法
创建 Set 后,常用方法有 add()、has()、delete() 和 size 属性:
-
const s = new Set([1, 2, 2, 3])→s.size是3 -
s.add(2)不改变内容,s.size仍为3 -
s.has(2)返回true;s.delete(2)成功后返回true
Set 和数组去重的常见配合
利用 Set 构造器能快速去重数组:
每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库--SQLite,本文介绍的就是如何为你的Android应用程序创建和操作SQLite数据库。 数据库支持每个应用程序无论大小的生命线,除非你的应用程序只处理简单的数据,那么就需要一个数据库系统存储你的结构化数据,Android使用SQLite数据库,它是一个开源的、支持多操作系统的SQL数据库,在许多领域广泛使用,如Mozilla FireFox就是使用SQLite来存储配置数据的,iPhon
立即学习“Java免费学习笔记(深入)”;
-
[...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 更轻量、语义更清晰










