set.prototype.add 是向 set 添加值的唯一方法,自动去重且返回 set 实例支持链式调用;支持任意类型值,按严格相等判断重复;对象按引用去重,批量添加需展开语法或循环。

Set.prototype.add 是 JavaScript 中向 Set 对象添加新值的唯一方法,它会自动确保值的唯一性——重复添加同一值不会报错,也不会改变集合内容。
基本用法:添加单个值
调用 add() 方法时传入任意类型的值(包括原始值、对象、函数等),它会将该值加入集合,并返回当前 Set 实例(支持链式调用):
const s = new Set(); s.add(1); // Set { 1 }s.add('hello').add(true); // Set { 1, 'hello', true }- 注意:
null和undefined可正常添加,且彼此不同
处理重复值:自动去重,不报错
add() 不会因重复添加而抛出错误或警告,只是静默忽略:
const s = new Set([1, 2]); s.add(1); // 仍为 Set { 1, 2 }- 判断是否真正新增,可比对
size:const wasAdded = s.size === (s.add(x), s.size);(不推荐,仅作理解) - 更实用的方式是先用
has()检查:if (!s.has(x)) s.add(x);
添加对象和引用类型:按内存地址判重
对象、数组、函数等引用类型,add() 使用严格相等(===)判断是否已存在:
const obj = {}; s.add(obj); s.add(obj); // 第二次无效,因为是同一引用s.add({}); s.add({}); // 两个不同对象,都会被添加- 若需按内容去重(如两个相同结构的对象视为重复),需自行封装逻辑(例如序列化后存入辅助 Set)
常见误区提醒
几个容易混淆的点:
-
add()返回的是Set本身,不是布尔值,不能直接用于条件判断 - 不能像数组那样用索引赋值:
s[0] = 'x'无效,必须用add() - 没有类似
push()的批量添加方法;批量添加需用展开语法:s = new Set([...s, 'a', 'b']);或循环调用add()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











