javascript数组的entries()返回索引与值组成的二维数组,keys()仅返回数值索引,values()只返回元素值;三者均为array.prototype方法,行为不同于object.keys()。

JavaScript 中数组没有原生的 entries() 和 keys() 方法——它们是 Array.prototype 上的方法,但只对数组实例有效,且行为与 Map 或 Object 不同。你不能直接用 for...of 遍历「索引与值」时混用 entries() 和 keys(),因为它们返回的是不同结构的迭代器。
entries():一次拿到索引和值(推荐)
arr.entries() 返回一个可迭代对象,每次迭代产生一个长度为 2 的数组:[index, value]。这是最直接获取索引与值的方式:
const arr = ['a', 'b', 'c'];
for (const [i, v] of arr.entries()) {
console.log(i, v); // 0 'a' → 1 'b' → 2 'c'
}
注意:必须用解构赋值 [i, v],否则得到的是类似 [0, 'a'] 这样的子数组。
keys():只遍历索引,需配合下标取值
arr.keys() 只返回索引的迭代器(0, 1, 2, ...),不带值。若想同时访问值,得手动用索引查数组:
- 适用于需要先处理索引、再按需读值的场景
- 避免创建额外的键值对结构,内存更轻量
- 写法略冗长,但语义清晰
const arr = ['x', 'y', 'z'];
for (const i of arr.keys()) {
console.log(i, arr[i]); // 0 'x' → 1 'y' → 2 'z'
}
别混淆:数组没有 Object.keys() 那种行为
Object.keys(arr) 返回字符串索引数组(['0', '1', '2']),且会受非数字属性影响;而 arr.keys() 是纯粹的数值索引迭代器,只对应数组的 length 范围,更可靠。不要混用:
- ✅
arr.keys()→ 安全、原生、数值索引 - ❌
Object.keys(arr)→ 返回字符串,可能包含意外属性(如自定义属性)
补充:values() 是只取值的简洁方式
如果只需要值,不用索引,arr.values() 更直白:
for (const v of arr.values()) {
console.log(v); // 'a', 'b', 'c'
}
它和 for...of arr 效果一致,但显式写出 .values() 可提升可读性,尤其在代码风格统一要求高时。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











