JavaScript数组的keys()、values()、entries()是原型上的迭代器方法,分别返回索引、元素、[索引,元素]迭代器,需用for...of或展开运算符消费,且迭代器只能使用一次。

JavaScript 中数组本身没有 keys() 和 values() 方法——这两个是 Array.prototype 上的**迭代器方法**,返回的是迭代器对象(Iterator),需要配合 for...of 或展开运算符等使用才能获取索引或元素。
用 keys() 获取数组索引集合
arr.keys() 返回一个遍历数组**索引(即数字下标)**的迭代器,从 0 开始,到 length - 1 结束。
- 它不返回值,只返回索引;索引是纯数字,按升序生成
- 不能直接打印迭代器对象,需用
for...of、Array.from()或展开运算符转换
示例:
const arr = ['a', 'b', 'c'];
const keyIter = arr.keys();
<p>console.log(keyIter); // Array Iterator {}
console.log([...keyIter]); // [0, 1, 2]
// 或
for (const index of arr.keys()) {
console.log(index); // 0, 1, 2
}用 values() 获取数组元素集合
arr.values() 返回一个遍历数组**元素值**的迭代器,顺序与原数组一致。
立即学习“Java免费学习笔记(深入)”;
- 这是
arr[Symbol.iterator]()的别名,所以for...of默认就是调用values() - 和
keys()一样,需通过迭代方式消费,不能直接访问
示例:
const arr = ['x', 'y', 'z'];
<p>console.log([...arr.values()]); // ['x', 'y', 'z']
// 等价于
console.log([...arr]); // ['x', 'y', 'z']</p><p>for (const val of arr.values()) {
console.log(val); // 'x', 'y', 'z'
}用 entries() 同时获取索引和元素
如果需要**成对获取索引与对应元素**,推荐用 arr.entries(),它返回键值对数组 [index, value] 的迭代器。
- 每个迭代项是长度为 2 的数组:第一个是索引,第二个是元素
- 常用于解构赋值,写法清晰直观
示例:
const arr = ['apple', 'banana'];
<p>for (const [i, item] of arr.entries()) {
console.log(i, item); // 0 'apple' → 1 'banana'
}</p><p>console.log([...arr.entries()]); // [[0, 'apple'], [1, 'banana']]注意:keys/values/entries 都是迭代器,不可重复使用
迭代器对象只能被消费一次。一旦遍历完成,再次尝试遍历时将不再产出值。
const arr = [10, 20]; const iter = arr.keys(); <p>console.log([...iter]); // [0, 1] console.log([...iter]); // [] ← 已耗尽,结果为空数组
如需多次使用,应每次重新调用 arr.keys() 等方法创建新迭代器。


















