javascript 的 values 迭代器用于遍历 map、set 和 array 中的值,返回可迭代对象,支持 for...of、展开运算符等;map.values() 返回键值对的值,set.values() 等价于 keys() 并返回唯一元素,array.values() 产出元素值且跳过空槽。

JavaScript 中的 values 迭代器用于遍历集合(如 Map、Set、Array 等)中存储的值,它返回一个可迭代对象(iterator),每次调用 next() 方法会产出下一个值,直到遍历完成。
Map.values() 获取键值对的值
Map 的 values() 方法返回一个迭代器,只遍历每个键值对的 值(value),不包含键(key)。
- 返回的是
MapIterator对象,支持for...of、展开运算符[...]、Array.from()等方式消费 - 顺序与插入顺序一致
示例:
const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
const valuesIter = map.values();
for (const val of valuesIter) {
console.log(val); // 1, 2, 3
}
// 或一次性转成数组
console.log([...map.values()]); // [1, 2, 3]
Set.values() 获取唯一元素
Set 的 values() 和 keys() 实际上是同一个方法(为保持与 Map API 兼容),都返回 Set 中所有元素的迭代器——因为 Set 没有“键”,它的值就是其唯一元素。
- 返回的迭代器产出顺序与插入顺序一致
-
Set.prototype.values === Set.prototype.keys为true
示例:
const set = new Set(['x', 'y', 'z']); console.log([...set.values()]); // ['x', 'y', 'z'] console.log(set.values() === set.keys()); // true
Array.prototype.values() 获取数组元素
数组也有 values() 方法,返回一个迭代器,逐个产出数组索引位置上的元素值(不是索引号)。
- 跳过空槽(sparse array 中的 empty slot),但不会跳过
undefined - 和
for...of遍历数组效果一致
示例:
const arr = ['a', , 'c']; // 索引 1 是空槽 console.log([...arr.values()]); // ['a', 'c'] —— 空槽被跳过 const arr2 = ['a', undefined, 'c']; console.log([...arr2.values()]); // ['a', undefined, 'c'] —— undefined 被保留
通用处理方式:把 values 迭代器转成数组或手动遍历
无论来自 Map、Set 还是 Array,values() 返回的都是迭代器,不能直接索引或调用数组方法。需要显式转换:
- 用展开运算符:
[...iter] - 用
Array.from(iter) - 用
for...of循环逐个读取 - 手动调用
iter.next()(较少用,适合流式或条件中断场景)
注意:迭代器只能消费一次,重复使用需重新调用 .values()。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











