for...of可直接遍历map,默认返回[key, value]数组,支持解构获取键值;也可用keys()/values()单独遍历;不可在遍历中修改map;for...in不适用于map数据遍历。

JavaScript 中 for...of 循环可以直接遍历 Map,因为 Map 是可迭代对象(实现了 [Symbol.iterator] 方法),默认迭代的是 [key, value] 键值对数组。所以配合数组解构语法,能非常简洁地同时获取键和值。
直接解构键与值
Map 的每次迭代返回一个包含两个元素的数组:[key, value]。在 for...of 的循环变量位置使用方括号解构,就能分别绑定键和值:
const myMap = new Map([
['name', 'Alice'],
['age', 30],
['city', 'Beijing']
]);
for (const [key, value] of myMap) {
console.log(key, value);
}
// 输出:
// name Alice
// age 30
// city Beijing
只遍历键或只遍历值
如果只需要键或值,可以分别用 myMap.keys() 或 myMap.values() 获取对应迭代器:
-
for (const key of myMap.keys())—— 遍历所有键 -
for (const value of myMap.values())—— 遍历所有值
注意:myMap.keys() 和 myMap.values() 返回的是迭代器对象,不是数组,但可直接用于 for...of。
配合其他操作(如条件过滤或修改)
解构后可在循环体内自由处理。例如跳过某个键、拼接字符串、或写入新结构:
const result = [];
for (const [key, value] of myMap) {
if (key !== 'age') {
result.push(`${key}: ${value}`);
}
}
console.log(result); // ['name: Alice', 'city: Beijing']
注意:不能在遍历过程中直接用 set() 或 delete() 修改当前正在遍历的 Map(虽然语法允许,但行为未定义,可能跳过条目或重复遍历)。如需修改,建议先收集操作意图,再统一执行。
和 for...in 的区别(避免常见误区)
for...in 遍历的是对象的**可枚举属性名**,而 Map 的键值对不作为对象属性存在,所以:
-
for (const k in myMap)不会遍历 Map 数据(除非你给 Map 实例手动添加了可枚举属性) -
for...of才是遍历 Map 内容的标准方式
另外,Map 的键可以是任意类型(函数、对象、Symbol 等),而 for...in 只能处理字符串/符号类型的属性名,也不支持这种灵活性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











