map的keys()、values()、entries()均返回按插入顺序遍历的懒执行迭代器,分别产出键、值、[键,值]数组;不可重用,不响应创建后的map修改,且无foreach方法。

JavaScript中Map对象的keys()、values()和entries()方法,都返回迭代器(Iterator),用于遍历Map中的键、值或键值对。它们不返回数组,而是可迭代对象,需配合for...of、扩展运算符或Array.from()等使用。
keys():只获取所有键
keys()返回一个迭代器,按插入顺序依次产出Map中每个键。键可以是任意类型(字符串、数字、对象、Symbol等)。
常见用法:
- 用
for...of循环遍历:
for (const key of myMap.keys()) { console.log(key); } - 转成数组:
const keyArray = Array.from(myMap.keys()); - 解构或展开:
const keys = [...myMap.keys()];
values():只获取所有值
values()返回一个迭代器,按插入顺序依次产出Map中每个对应值。值同样支持任意类型,且允许重复。
注意点:
- 即使值是引用类型(如对象),
values()返回的是原值的引用,不是副本。 - 无法通过值反查键,Map本身不提供“值→键”的查找接口。
- 常用转换方式:
const vals = Array.from(myMap.values());
entries():同时获取键值对
entries()是Map默认的迭代方法(myMap[Symbol.iterator] === myMap.entries),返回键值对数组[key, value]组成的迭代器。
典型使用场景:
- 配合
for...of解构:
for (const [key, value] of myMap.entries()) { /* 使用 key 和 value */ } - 转为二维数组:
const pairs = [...myMap.entries()]; // [[k1,v1], [k2,v2]] - 构造新Map(浅拷贝):
const copy = new Map(myMap.entries());
三者共性与注意事项
它们都遵循Map的插入顺序,且返回的迭代器是“懒执行”的——不立即计算全部结果,每次调用next()才产出下一个项。
关键细节:
- 迭代器不可重用:一旦遍历完成或中途break,再次遍历时需重新调用
keys()等获取新迭代器。 - 不响应后续增删:迭代器创建后,对Map的修改(如
set()、delete())不会影响已生成的迭代器行为(但会影响后续调用next()的结果,取决于具体时机)。 - 不能直接用
.forEach():这些方法返回的是迭代器,不是数组,没有forEach方法;如需类似逻辑,可用for...of或先转数组。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











