set.delete() 从 set 中移除指定值并返回布尔结果:成功为 true,未找到为 false;支持 samevaluezero 比较(如 nan、0 与 -0),引用类型需传入同一对象实例;原地修改,不返回新 set。

Set.delete() 方法用于从 Set 实例中移除指定值,成功删除返回 true,未找到该值则返回 false,不会报错。
基本用法
调用 delete() 时传入要移除的元素值(注意:Set 使用 SameValueZero 比较算法,支持 NaN、0 和 -0 的正确判断):
const mySet = new Set([1, 2, 3, 'hello', NaN]);
mySet.delete(2); // true → 已删除
mySet.delete('world'); // false → 不存在
mySet.delete(NaN); // true → NaN 能被正确识别并删除
console.log(mySet); // Set {1, 3, 'hello'}
删除对象或引用类型要注意
Set 中存储的是引用地址。对对象、数组等引用类型调用 delete(),必须传入**完全相同的引用**才能成功删除:
- ✅ 正确:用最初添加的那个对象实例去删
- ❌ 错误:新建一个内容相同但地址不同的对象去删
const obj = { name: 'Alice' };
const arr = [1, 2];
const set = new Set([obj, arr]);
set.delete(obj); // true → 成功删除原始引用
set.delete({ name: 'Alice' }); // false → 新对象,地址不同
set.delete([1, 2]); // false → 新数组,地址不同
常见使用场景
- 用户权限管理:用 Set 存储已授权角色,取消权限时调用
delete(role) - 待处理 ID 队列:添加任务 ID 后,完成时用
delete(id)清理 - 防重复提交:点击按钮后将请求 ID 加入 Set,请求结束再
delete(id) - 配合遍历动态过滤:在
for...of循环中安全删除(不影响后续迭代)
和数组 filter 的区别
不同于数组的 filter() 会生成新数组,Set.delete() 是原地修改,不改变其他元素顺序,也没有返回新 Set;它只关心“删不删得掉”,不返回更新后的集合本身。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











