Map.prototype.values()返回按插入顺序遍历所有值的迭代器,需用for...of、展开运算符或Array.from()转换为数组才能使用数组方法,它与keys()、entries()同为迭代器且每次调用新建独立实例。

Map.prototype.values() 方法返回一个包含 Map 中所有值的迭代器对象(MapIterator),它按插入顺序遍历值,且不重复、不跳过 undefined 或 null。
基本用法:获取并遍历值迭代器
调用 map.values() 后得到的是一个可迭代对象,不能直接打印出全部值,需配合 for...of、展开运算符([...])或 Array.from() 使用:
-
用 for...of 遍历:
const map = new Map([['a', 1], ['b', 2], ['c', undefined]]);<br> for (const value of map.values()) {<br> console.log(value); // 依次输出:1, 2, undefined<br> } -
转成数组:
const valuesArray = [...map.values()]; // [1, 2, undefined]<br> // 或:<br> const valuesArray2 = Array.from(map.values());
注意:values() 返回的是迭代器,不是数组
它没有数组方法(如 map、filter、length),也不能用索引访问:
-
❌ 错误写法:
const iter = map.values();<br> console.log(iter[0]); // undefined<br> iter.map(x => x * 2); // TypeError: iter.map is not a function
-
✅ 正确转换后再操作:
const arr = [...map.values()];<br> const doubled = arr.map(x => x * 2); // [2, 4, NaN](undefined * 2 → NaN)
与 keys() 和 entries() 的关系
三者返回的都是迭代器,仅内容不同:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
map.keys()→ 迭代键(key) -
map.values()→ 迭代值(value) -
map.entries()→ 迭代[key, value]数组(默认迭代器,for...of直接用就是它)
它们都遵循插入顺序,且每次调用都创建**新迭代器**,互不影响。
实用小技巧:快速提取唯一值或过滤
结合 Set 去重,或用 Array 方法处理:
-
去重值(如果值本身可作为 Set 元素):
const uniqueValues = [...new Set(map.values())]; -
筛选非空值:
const nonEmptyValues = [...map.values()].filter(v => v != null && v !== undefined);

















