set.prototype.values()返回包含集合所有值的迭代器,等价于默认迭代器和keys(),entries()返回[value, value]键值对;迭代器惰性求值、不可重用,需配合for...of、array.from()或扩展运算符转为数组使用。

Set.prototype.values() 方法返回一个包含集合中所有值的迭代器对象,它和 Set.prototype[Symbol.iterator]() 行为完全一致,因为 Set 的默认迭代器就是 values()。
values() 返回的是可迭代对象,不是数组
调用 set.values() 不会直接得到数组,而是返回一个 SetIterator 对象,需配合 for...of、扩展运算符或 Array.from() 使用才能提取值:
- 用
for...of遍历:
for (const value of mySet.values()) {
console.log(value); // 'a', 'b', 'c'
}
- 转成数组:
const arr2 = [...mySet.values()]; // 同样得到 ['a', 'b', 'c']
values() 和 keys()、entries() 在 Set 中是等价的
Set 没有“键-值”概念,所以它的 keys() 和 values() 返回相同迭代器,entries() 则返回形如 [value, value] 的键值对:
console.log(s.values() === s.keys()); // true
console.log([...s.entries()]); // [[1, 1], [2, 2]]
注意:迭代器是惰性求值且不可重用
每次调用 values() 都创建新迭代器;同一个迭代器对象只能遍历一次,再次调用 next() 会持续返回 {done: true}:
console.log(iter.next()); // {value: 'a', done: false}
console.log(iter.next()); // {value: 'b', done: false}
console.log(iter.next()); // {value: 'c', done: false}
console.log(iter.next()); // {value: undefined, done: true}
实际用途:配合解构或函数式操作
常用于快速获取唯一值列表,或与 filter/map 等组合(需先转数组):
const nums = new Set([1, 2, 2, 3, 4]);const evens = [...nums.values()].filter(n => n % 2 === 0); // [2, 4]
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











