set.prototype.delete() 方法用于删除指定值的成员,成功返回true、失败返回false,严格比较(nan与nan相等),对象需传原引用,不支持键名删除。

JavaScript Set 的 delete() 方法可以直接移除指定值的成员,成功返回 true,未找到则返回 false,不会报错。
delete() 的基本用法
Set 的 delete() 接收一个参数:要删除的值。它会严格比较(使用 SameValueZero 算法,类似 ===,但 NaN 与 NaN 视为相等)。
- 删除存在的元素 → 返回
true - 删除不存在的元素 → 返回
false - 删除后原 Set 被修改,不返回新 Set
示例:
const set = new Set([1, 'a', true, NaN]);console.log(set.delete(1)); // true
console.log(set.delete('b')); // false
console.log(set.delete(NaN)); // true(NaN 可被正确删除)
console.log(set); // Set { 'a', true }
注意值的类型和引用一致性
Set 中对象或数组按引用存储,delete() 删除时必须传入**同一个引用**,不是“内容相同”的新对象。
- 对原始值(如字符串、数字、布尔、
null、undefined、NaN)直接比较值 - 对对象、数组、函数,必须传入原先 add 进去的那个实例
示例:
const obj = { id: 1 };const set = new Set([obj, [1, 2]]);
set.delete(obj); // true —— 用原始引用
set.delete({ id: 1 }); // false —— 新对象,引用不同
set.delete([1, 2]); // false —— 新数组,引用不同
常见误操作提醒
- 不要用
delete set.value(这是删除对象属性,对 Set 无效) - 不要混淆
Map.prototype.delete(key)—— Set 没有键名,只删值 - 删除后建议检查返回值,便于调试逻辑(比如确认某项是否真的存在)
- 如果需批量删除,可结合
for...of或Array.from(set)遍历,但注意边遍历边删除可能影响迭代顺序(安全做法是先收集待删项,再逐个调用delete)
替代方案:清空整个 Set
如果想清空所有成员,delete() 不适用;应重新赋值或用 clear() 方法:
// 或 set = new Set(); // 创建新 Set,原引用失效
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











