Set的add方法添加唯一值并返回Set实例(支持链式调用),重复添加无效果;delete方法按SameValueZero规则删除指定值,成功返回true,需用原引用删除对象。

Set 的 add 和 delete 方法非常直接:add 用于添加唯一值,delete 用于移除指定值,成功返回 true,失败返回 false。
add 方法:添加元素(自动去重)
add 接收一个参数,即要添加的值。Set 只允许存储唯一值,重复调用 add 同一值不会报错,也不会改变 Set 内容。
- 每次 add 返回的是当前 Set 实例(可链式调用)
- NaN 和 NaN 被视为相等(符合 SameValueZero 规则),所以第二次 add(NaN) 不会生效
- 对象按引用判断是否重复,不同对象即使内容相同也会被当作新元素添加
示例:
const s = new Set();s.add(1).add('a').add({x: 1}); // 链式调用
s.add(1); // 无变化,Set 仍为 {1, 'a', {x: 1}}
delete 方法:删除指定元素
delete 接收一个参数,即要删除的值。它严格依据 SameValueZero 比较(类似 ===,但 NaN === NaN 为 false,而 Set 中 NaN 等于 NaN)。
立即学习“Java免费学习笔记(深入)”;
- 删除成功返回 true,未找到返回 false
- 删除对象需使用原引用;用新对象字面量无法删掉已存对象
- delete 不影响其他元素,也不改变 Set 大小以外的状态
示例:
const s = new Set([1, 'hello', {y: 2}]);const obj = {y: 2};
s.add(obj); // 此时 Set 包含两个 {y: 2}?不,只加了新引用
s.delete(1); // true
s.delete('world'); // false
s.delete(obj); // true(必须用同一个 obj 引用)
配合 has 方法做安全操作
实际开发中,常先用 has 判断再 delete,或根据条件决定是否 add。
- has 返回布尔值,用于检查某值是否存在
- 避免无效 delete 或重复 add 的逻辑更清晰
示例:
if (!s.has('newItem')) {s.add('newItem');
}
if (s.has('oldItem')) {
s.delete('oldItem');
}
注意:null、undefined 和基本类型行为一致
null 和 undefined 在 Set 中是合法值,各自独立存在,且能被正常 add/delete。
const s = new Set();s.add(null); // ✅
s.add(undefined); // ✅
s.add(0); // ✅
s.delete(null); // true


















