map和set均原生支持迭代器,map默认遍历键值对,提供keys()、values()、entries()三种迭代器;set默认遍历元素,values()与keys()等价且都返回元素迭代器。

JavaScript 中的 Map 和 Set 都原生支持迭代器(Iterator),可以直接用 for...of 遍历,也可以手动调用 .values()、.keys()、.entries() 等方法获取对应迭代器对象。
Map 的三种遍历方式
Map 默认迭代的是键值对([key, value]),但提供三个专用迭代器方法:
-
map.keys():返回只遍历键的迭代器 -
map.values():返回只遍历值的迭代器 -
map.entries():返回遍历键值对的迭代器(默认行为)
示例:
const map = new Map([['a', 1], ['b', 2]]); for (const key of map.keys()) console.log(key); // 'a', 'b' for (const val of map.values()) console.log(val); // 1, 2 for (const [k, v] of map.entries()) console.log(k, v); // 'a' 1, 'b' 2 for (const [k, v] of map) console.log(k, v); // 同上,因为 map[Symbol.iterator] === map.entries
Set 的两种常用遍历方式
Set 默认迭代的是元素本身,它也提供两个迭代器方法:
-
set.values():返回遍历所有值的迭代器(与set[Symbol.iterator]()相同) -
set.keys():为保持与MapAPI 一致性而存在,实际也返回值的迭代器(Set没有“键”的概念)
注意:set.keys() === set.values() 为 true,两者完全等价。
示例:
const set = new Set([1, 2, 3]); for (const item of set) console.log(item); // 1, 2, 3 for (const item of set.values()) console.log(item); // 同上 for (const item of set.keys()) console.log(item); // 也一样
手动调用 Iterator 接口
所有可迭代对象(包括 Map、Set)都实现了 [Symbol.iterator] 方法。你可以手动获取迭代器并逐个调用 .next():
const map = new Map([['x', 10], ['y', 20]]);
const iter = map[Symbol.iterator]();
console.log(iter.next()); // { value: ['x', 10], done: false }
console.log(iter.next()); // { value: ['y', 20], done: false }
console.log(iter.next()); // { value: undefined, done: true }
这种写法较少用于日常开发,但在理解迭代机制或实现自定义遍历时很有用。
转成数组或解构使用
借助展开语法(...)或 Array.from(),能快速把迭代器结果转为数组:
-
[...map]→[['a', 1], ['b', 2]] -
[...map.keys()]→['a', 'b'] -
[...set]→[1, 2, 3] -
Array.from(set)→ 同上
解构也直接可用:const [first, ...rest] = set;
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











