for-of 配合 entries() 可获取数组索引和值,entries() 返回迭代器,每项为 [index, value] 数组,支持解构;它跳过空位但包含显式 undefined,优于 for-in(遍历属性名、顺序不定)和传统 for(需手动维护索引)。

JavaScript 中 for-of 循环本身不直接提供索引,但可以通过数组的 entries() 方法获取带索引的键值对,再配合解构赋值轻松拿到索引和元素值。
entries() 返回的是可迭代对象
arr.entries() 返回一个迭代器,每次迭代产生一个形如 [index, value] 的数组。这个结构天然适合用数组解构来提取。
- 它不是普通数组,不能用
forEach或下标访问,必须用for-of、...spread或next()消费 - 每个“项”是一个长度为 2 的数组:第一个元素是索引(number),第二个是对应值
基本写法:用解构直接取 index 和 value
在 for-of 循环中对每次迭代的项进行解构即可:
const arr = ['a', 'b', 'c'];
for (const [index, value] of arr.entries()) {
console.log(index, value); // 0 'a' → 1 'b' → 2 'c'
}
注意点:entries() 包含所有索引(包括空位)
对于稀疏数组或使用 delete 删除过元素的数组,entries() 仍会为存在的索引生成条目,但不会为“空槽”(empty slot)产出项。
- 例如:
const a = [1, , 3];(中间是空位),a.entries()只返回[0,1]和[2,3],跳过索引 1 - 而
const b = [1, undefined, 3];中索引 1 是显式undefined,会被正常遍历到
替代方案对比(为什么不用 for-in 或传统 for)
for-in 遍历的是属性名(字符串),会枚举继承属性且顺序不保证;传统 for (let i = 0; i 虽然直观,但多写变量、易出边界错误。而 for-of + entries() 语义清晰、安全、简洁,是现代推荐做法。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











