set 是 javascript 中存储唯一值的内置集合,使用 object.is() 判定相等性,支持原始类型和引用类型,自动去重且保持插入顺序。

Set 是 JavaScript 中一种内置的集合数据结构,用于存储唯一值,无论值的类型是原始类型(如字符串、数字)还是引用类型(如对象、函数),Set 都会确保其中每个成员仅出现一次。
Set 的基本定义与创建方式
Set 通过 new Set() 构造函数创建,可选地传入一个可迭代对象(如数组、字符串)作为初始元素。它不基于键值对,也不支持索引访问,而是以“值的集合”为核心概念。
- 空 Set:
const s = new Set(); - 带初始值:
const s = new Set([1, 2, 2, 3]); // 实际内容为 {1, 2, 3} - 接受字符串(按字符拆分):
new Set('hello') → {'h', 'e', 'l', 'o'}(注意:重复的 'l' 只保留一个)
成员唯一性的判定逻辑
Set 判定两个值是否相等,使用的是类似 Object.is() 的算法,而非 == 或 ===。这意味着:
-
NaN和NaN被视为相同(而NaN === NaN为 false) -
+0和-0被视为不同(Object.is(+0, -0)返回 false,Set 中两者可共存) - 基本类型(如数字、布尔值、字符串)按值比较;对象和函数按引用比较(即两个不同对象即使内容相同,也被视为不同成员)
常用操作方法体现唯一性保障
所有增删查方法都自动维护唯一性,无需手动去重:
-
add(value):若值已存在,不报错也不生效,返回当前 Set 对象 -
has(value):精确判断是否存在该值(遵循 Object.is 规则) -
size属性始终反映实际唯一成员数量 - 遍历时(如
for...of、forEach)每个值只出现一次,顺序为插入顺序
与数组去重的典型对比
利用 Set 快速实现数组去重是其高频用法,简洁且语义清晰:
- 传统方式需嵌套循环或借助 filter + indexOf,逻辑复杂易出错
- Set 方式:
[...new Set([1, 2, 2, 3])] → [1, 2, 3],一行解决,天然适配所有类型 - 注意:该方法不改变原数组,也不保留原始数组中非唯一项的首次出现位置以外的信息(这本身就是去重的目标)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











