Set 是 JavaScript 中存储唯一值的内置对象,自动去重且对 NaN 和 +0/-0 有特殊处理;支持 add、has、delete 等操作,可与数组互转实现快速去重,遍历方式包括 for...of、forEach 及 keys/values/entries。

Set 是 JavaScript 中用于存储唯一值的内置对象,它自动确保所有元素互不重复,无论原始数据类型是基本类型还是引用类型(对引用类型按内存地址判断)。
Set 的核心特性:自动去重
Set 在添加值时会用严格相等(===)比较,但对 NaN 有特殊处理——它认为多个 NaN 是相等的,因此只保留一个;而 +0 和 -0 在 Set 中被视为相同值(符合 IEEE 754 规范)。
- 字符串、数字、布尔值等基本类型:值相同即视为重复
- 对象、数组、函数等引用类型:只有同一引用(指向同一内存地址)才算重复
-
new Set([1, 1, 2, '2', '2'])→{1, 2, '2'}(数字 1 和字符串 '1' 不冲突)
常用操作方法
Set 提供简洁的 API 管理唯一值:
-
add(value):添加一个值,返回 Set 本身(可链式调用) -
has(value):检查是否包含某值,返回布尔值 -
delete(value):删除指定值,返回是否删除成功 -
clear():清空所有值 -
size:获取当前元素个数(不是方法,是属性)
与数组互转:快速实现去重
利用 Set 的唯一性,可以一行代码去除数组重复项:
立即学习“Java免费学习笔记(深入)”;
- 数组 → Set → 数组:
[...new Set([1, 2, 2, 3])]或Array.from(new Set(arr)) - Set → 数组:
Array.from(mySet)或[...mySet] - 注意:Set 本身不支持索引访问(如
set[0]),需转为数组再操作
遍历 Set 的几种方式
Set 是可迭代对象,支持多种遍历语法:
-
for...of:按插入顺序遍历值(for (const v of mySet) { ... }) -
forEach():类似数组,回调参数为(value, value, set)(前两个参数相同) -
keys()、values()、entries():都可用,但keys()和values()行为一致(因为 Set 只有值,没有键)











