关于 JavaScript 中 new Set() 的详解
new Set() 是什么?
它是 JavaScript 中用于创建 Set 对象的构造函数。Set 是一种特殊的数据集合,核心特性是 自动去重(所有值唯一)。
核心特性:
- 值唯一性
自动忽略重复值,每个值在 Set 中只能出现一次。
const set = new Set();
set.add("苹果");
set.add("苹果"); // 重复值被忽略
console.log(set); // 输出: Set(1) { "苹果" }
- 支持任何数据类型
可存储:字符串、数字、对象、null、undefined,甚至 NaN(Set 视 NaN 为相同值)。 - 常用方法:
.add(值):添加值(返回 Set 本身,可链式调用)。
.has(值):检查是否存在该值(返回布尔值)。
.delete(值):删除值(成功返回 true)。
.clear():清空所有值。
.size:属性,获取当前值的数量(非方法)。
实际示例
// 1. 创建 Set
const fruits = new Set();// 2. 添加值
fruits.add("🍎");
fruits.add("🍌").add("🍇"); // 链式添加
fruits.add("🍎"); // 重复值无效// 3. 检查与操作
console.log(fruits.size); // 输出: 3(苹果、香蕉、葡萄)
console.log(fruits.has("🍌")); // 输出: true
fruits.delete("🍇"); // 删除葡萄// 4. 转换为数组(经典用法:数组去重)
const arr = [1, 1, 2, 3];
const uniqueArr = [...new Set(arr)]; // [1, 2, 3]
关键细节
- 值比较规则:使用严格相等 (===),但 NaN 被视为相同(与 === 不同)。
- 顺序保留:Set 会记住值的添加顺序(遍历时按插入顺序输出)。
- 高效查找:has() 方法性能远优于数组的 includes()(尤其数据量大时)。
常见用途
- 数组去重(最常用)
const arr = [1, 2, 2, 3];
const unique = [...new Set(arr)]; // [1, 2, 3]
- 存储不重复的键(如用户 ID 列表)
- 高效存在性检查(替代数组搜索)
如果需要键值对结构,请使用 Map;若只需唯一值集合,Set 是最佳选择。