JavaScript Set 用法详解
JavaScript 中的 Set 是一种集合(Collection)数据结构,用于存储唯一值(即不能重复的值)的有序列表。它是在 ES6(ECMAScript 2015)中引入的内置对象。
🧩 核心特点
- 值唯一性:
Set中的每个值只能出现一次,无论你是添加多少次重复的值,它只会保留一个。 - 可存储任意类型:可以存储原始类型(如字符串、数字、布尔值)和对象引用(包括数组、对象等)。
- 插入顺序保留:遍历时,元素的顺序与其插入顺序一致。
- 不是索引结构:不像数组那样通过数字索引访问元素,而是通过迭代器遍历。
🛠 常用方法和属性
| 方法/属性 | 说明 |
|---|---|
new Set([iterable]) |
创建一个 Set,可选传入数组等可迭代对象进行初始化 |
set.add(value) |
添加一个值(若已存在则忽略) |
set.delete(value) |
删除某个值,返回布尔值表示是否删除成功 |
set.has(value) |
检查是否存在某个值,返回 true/false |
set.clear() |
清空所有元素 |
set.size |
返回元素个数(类似数组的 length) |
🔁 遍历方式
Set 是可迭代的(iterable),支持以下遍历:
const set = new Set([1, 2, 3]);
// for...of
for (const item of set) {
console.log(item);
}
// forEach
set.forEach(value => console.log(value));
// 转为数组
const arr = [...set]; // [1, 2, 3]
✅ 常见用途
-
数组去重(最经典用法):
const unique = [...new Set([1, 2, 2, 3, 3, 3])]; console.log(unique); // [1, 2, 3] -
高效判断元素是否存在(比数组的
indexOf更语义化且性能更好):const bannedUsers = new Set(['alice', 'bob']); if (bannedUsers.has(currentUser)) { // 拒绝访问 } -
集合运算(如交集、并集、差集):
const a = new Set([1, 2, 3]); const b = new Set([2, 3, 4]); // 并集 const union = new Set([...a, ...b]); // 交集 const intersect = new Set([...a].filter(x => b.has(x))); // 差集(a - b) const diff = new Set([...a].filter(x => !b.has(x)));
⚠️ 注意事项
-
对象引用比较:
Set使用「严格相等」(===)判断重复,因此两个内容相同但引用不同的对象会被视为不同元素:const set = new Set(); set.add({}); set.add({}); console.log(set.size); // 2(两个不同的对象) -
NaN 的处理:
Set认为所有NaN是相等的(尽管NaN !== NaN),所以只会保留一个NaN。
总结
Set是 JavaScript 中用于高效存储和操作唯一值集合的工具,特别适合去重、成员检测和集合运算等场景。它是现代 JS 开发中非常实用的数据结构之一。
#前端开发
分享于 2025-10-31