keys()和values()是ES6为数组新增的原型方法,返回不可重用的数组迭代器:keys()遍历全部索引(含空槽),values()遍历对应值(空槽返回undefined),二者均可用于for...of或Array.from()转换。

keys() 和 values() 是 ES6 为数组实例新增的原型方法,它们不返回普通数组,而是直接返回一个数组迭代器对象(Array Iterator),可用于 for...of 循环或手动调用 .next() 遍历。
keys():获取索引键的迭代器
arr.keys() 返回一个遍历数组索引(即键名)的迭代器,从 0 开始,连续递增,包括稀疏位置的索引(即空槽也会被计入)。
const arr = ['a', , 'c']; // 索引 1 是空位(undefined,但不是缺失属性)
const keyIter = arr.keys();
for (const key of keyIter) {
console.log(key); // 输出:0, 1, 2
}⚠️ 注意:
-
Object.keys(arr)返回的是['0', '2'](只枚举存在的、可枚举的自有属性),而arr.keys()是按数组长度生成全部索引,不管是否为空槽。 - 返回的迭代器是不可重用的:遍历完一次后,再次
for...of不会重新开始,需重新调用.keys()。
values():获取元素值的迭代器
arr.values() 返回一个遍历每个索引对应值的迭代器,顺序与数组一致,空槽位置返回 undefined。
const arr = ['x', , 'z']; const valIter = arr.values(); console.log(valIter.next().value); // 'x' console.log(valIter.next().value); // undefined(索引 1 的空槽) console.log(valIter.next().value); // 'z'
✅ 该迭代器行为与 for...of arr 完全等价(因为数组默认迭代器就是 values()):
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
for (const v of arr) console.log(v); // 'x', undefined, 'z' for (const v of arr.values()) console.log(v); // 同上
小技巧:转成数组一次性使用
如果需要立即拿到所有键或值,可用 Array.from():
const arr = ['p', 'q', 'r']; Array.from(arr.keys()); // [0, 1, 2] Array.from(arr.values()); // ['p', 'q', 'r'] Array.from(arr.entries()); // [[0,'p'], [1,'q'], [2,'r']]
补充说明:entries() 是组合体
arr.entries() 同时提供索引和值,常配合解构使用:
for (const [i, v] of arr.entries()) {
console.log(`索引 ${i}: ${v}`);
}它本质是 keys() 和 values() 的配对迭代器,内部按 [index, value] 元组形式产出。
不复杂但容易忽略

















