如何用 add 与 delete 动态管理 Set 集合中的唯一成员

张开发
2026/4/11 23:38:07 15 分钟阅读

分享文章

如何用 add 与 delete 动态管理 Set 集合中的唯一成员
add和delete必须配合new Set()创建的实例使用不能用于数组或普通对象add返回Set本身可链式调用delete返回布尔值成员唯一性基于SameValueZero算法对象按引用判等NaN可正确删除size只读且不响应式遍历须用for…of或Array.from。add 和 delete 方法必须配合 Set 实例使用不能直接操作字面量Set 是引用类型new Set() 创建的是一个可变对象但 Set 字面量比如 {} 或数组不是 Set 实例调用 add 或 delete 会报错TypeError: xxx.add is not a function。常见错误是误把数组当 Set比如写 [1, 2, 3].add(4)这根本跑不通或者试图对普通对象调用 delete结果删的是对象属性而非集合成员。务必先用 new Set() 初始化再调用方法add 返回 Set 实例本身可链式调用delete 返回布尔值表示是否成功移除Set 成员唯一性由 SameValueZero 算法判定0 和 -0 被视为相同NaN 和 NaN 也被视为相同add 方法不会覆盖已有值但要注意原始值与对象的判等差异add 插入重复值时静默失败不报错也不改变 Set 内容。这点和 Map 不同——Map 的 set 会覆盖而 Set 的 add 只认“是否已存在”。陷阱多出在对象上{a:1} 和 {a:1} 是两个不同引用add 会把它们都加进去但字符串 1 和数字 1 是不同类型会被视为不同成员。基本类型string/number/boolean/null/undefined按值比较安全对象、数组、函数按引用比较每次 new Object() 都是新成员如果要基于内容去重对象得自己封装逻辑比如用 JSON.stringify Map 缓存Set 原生不支持delete 方法只删值不关心索引或顺序且对不存在的值返回 falseSet 没有索引概念delete 接收的是具体值不是位置。传入不存在的值比如 mySet.delete(missing)不会报错只是返回 false —— 这个返回值常被忽略导致误判删除是否生效。 幻导航网 发现优质实用网站,开启网络探索之旅

更多文章