for...of 本身不提供索引,需用 entries() 解构获取索引和值;keys() 仅遍历索引;手动计数器不推荐;for...in 遍历属性名,不适用于数组索引遍历。

for...of 本身不提供索引,它只遍历值。想在 for...of 中拿到索引,得借助额外手段。
用 entries() 配合解构
这是最推荐、语义最清晰的方式。数组的 entries() 方法返回一个可迭代对象,每次产出 [index, value] 形式的数组,配合解构即可直接获取索引和值:
const arr = ['a', 'b', 'c'];
for (const [index, value] of arr.entries()) {
console.log(index, value); // 0 'a' → 1 'b' → 2 'c'
}
用 Array.prototype.keys() 单独遍历索引
如果只需要索引(不需要值),可用 keys():
for (const index of arr.keys()) {
console.log(index); // 0 → 1 → 2
}
手动维护计数器(不推荐,仅作对比)
虽然可行,但违背 for...of 的设计初衷,易出错且可读性差:
立即学习“Java免费学习笔记(深入)”;
let i = 0;
for (const value of arr) {
console.log(i, value);
i++;
}
这种方式无法处理稀疏数组或 Symbol.iterator 被重写的情况,也不支持 break/continue 后继续正确计数,应避免使用。
注意:不要混淆 for...in 和 for...of
for...in 遍历对象的可枚举属性名(包括数组的数字索引,但也可能遍历原型链上的属性),不保证顺序,**不适用于数组索引遍历**;for...of 遍历的是可迭代协议定义的值,安全、有序、专为数据结构设计。二者用途完全不同。


















