JavaScript Set 是用于存储唯一值的内置对象,使用SameValueZero算法判断相等性(+0与-0、NaN与NaN均视为相等),支持任意类型值但对象按引用区分,提供add、has、delete及size等方法,常用于数组去重。
JavaScript Set 是一个内置对象,用来存储唯一值的集合。它不关心值的类型,可以存放数字、字符串、对象、函数,甚至 undefined 和 null,但同一个值在 Set 中只会出现一次——重复添加会被自动忽略。
Set 使用“SameValueZero”算法判断两个值是否相等(和 === 类似,但有个关键区别:+0 和 -0 被视为相等,NaN 和 NaN 也被视为相等)。这意味着:
new Set([0, -0, 0]) 实际只存一个 0
new Set([NaN, NaN]) 实际只存一个 NaN(而普通数组或对象无法这样识别 NaN)new 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 构造器能快
速去重数组:
[...new Set([1, 2, 2, 3])] → [1, 2, 3]
Array.from(new Set(arr)) 效果相同,适合需要调用其他 Array 方法的场景s[0]),要遍历请用 for...of、forEach 或展开运算符Set 存的是“值”,不是“键值对”:
get(key) 取值Map;如果只需“一堆不重复的值”,Set 更轻量、语义更清晰