javascript中iterator不直接配合keys获取键名,而是通过object.keys()等方法返回可迭代对象;object.keys()返回数组(非原生iterator),需调用[symbol.iterator]()获取真正迭代器;map/ set.keys()直接返回原生迭代器;array.keys()返回索引迭代器;自定义对象需手动实现symbol.iterator或keys()方法。

在 JavaScript 中,Iterator 本身不直接“配合 keys”获取键名,而是通过对象的 keys() 方法(如 Object.keys()、Map.prototype.keys()、Array.prototype.keys() 等)返回一个可迭代对象(即具有 [Symbol.iterator] 的对象),这个对象内部封装了迭代器逻辑。你可以用 for...of、展开运算符或手动调用 .next() 来消费它。
Object.keys() 返回的是数组,不是原生 Iterator
Object.keys(obj) 返回的是一个普通数组(如 ['a', 'b']),它本身是可迭代的(因为数组有 [Symbol.iterator]),但不是“Iterator 对象”。要得到真正的迭代器,需显式调用 [Symbol.iterator]():
const iter = Object.keys(obj)[Symbol.iterator]();- 之后可用
iter.next()逐个取键名:{ value: 'a', done: false }
Map 和 Set 的 keys() 方法直接返回 Iterator
Map.prototype.keys() 和 Set.prototype.keys()(等价于 .values())返回的就是原生迭代器对象,可直接用于迭代:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
const map = new Map([['x', 1], ['y', 2]]);const keyIter = map.keys(); // Iterator { 'x', 'y' }keyIter.next(); // { value: 'x', done: false }[...map.keys()]; // ['x', 'y'](展开为数组)
Array.prototype.keys() 返回索引迭代器
数组的 .keys() 不返回元素值,而是返回**索引**(0, 1, 2…)的迭代器:
['a', 'b', 'c'].keys(); // Iterator { 0, 1, 2 }- 常用于需要索引 + 值配对的场景,比如结合
entries()或for...of解构
自定义对象支持 keys 迭代:需实现 Symbol.iterator
若想让自定义对象拥有类似 obj.keys() 并返回迭代器,需手动定义方法并返回一个符合迭代协议的对象:
obj[Symbol.iterator] = function* () { yield* Object.keys(this); };- 或提供
keys()方法:obj.keys = function() { return Object.keys(this)[Symbol.iterator](); }; - 这样就能写
for (const k of obj.keys()) { ... }
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










