set迭代器默认按插入顺序遍历且去重;支持for...of、扩展运算符、array.from等;values()/keys()/entries()返回相同迭代器;不可用for...in;遍历时修改set大小行为未定义;nan视为相等。

JavaScript 中 Set 对象的迭代器默认按插入顺序遍历成员,且每个值只出现一次。它本身是可迭代的([Symbol.iterator] 方法存在),所以能直接用 for...of、扩展运算符、解构、Array.from() 等方式遍历。
用 for...of 直接遍历
这是最常用、最直观的方式,无需额外转换:
const set = new Set(['a', 'b', 'c']);
for (const item of set) {
console.log(item); // 'a' → 'b' → 'c'
}获取并手动调用迭代器
Set 的 values() 方法返回一个迭代器对象(keys() 和 entries() 也返回相同迭代器,因为 Set 没有键值对概念):
const set = new Set([1, 2, 3]); const iterator = set.values(); // 或 set.keys(), set.entries() <p>console.log(iterator.next().value); // 1 console.log(iterator.next().value); // 2 console.log(iterator.next().value); // 3 console.log(iterator.next().done); // true</p>
转成数组再处理
适合需要数组方法(如 map、filter)的场景:
-
[...set]—— 扩展运算符,简洁高效 -
Array.from(set)—— 兼容性更好,支持映射函数:Array.from(set, x => x * 2) -
Array.from(set).forEach(...)或[...set].map(...)
注意点
- Set 迭代器不支持
for...in(它遍历的是对象属性名,而 Set 没有可枚举属性) - 遍历时不能修改 Set 大小(如边遍历边
add或delete),否则行为未定义(部分引擎可能抛错或跳过新元素) - NaN 在 Set 中被视为相等(
new Set([NaN, NaN])只含一个 NaN),迭代时也只出现一次
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











