Array.prototype.keys()返回只含数字索引的迭代器,从0开始递增,不跳过稀疏数组空位,可用for...of遍历或[...arr.keys()]转数组,区别于values()(值)和entries()(键值对)。

Array.prototype.keys() 返回一个包含数组索引(即数字下标)的迭代器,它不会返回元素值,只生成从 0 开始递增的整数索引。
基本用法:获取并遍历索引迭代器
调用 arr.keys() 后得到的是一个可迭代对象,需配合 for...of、展开运算符 [...] 或 next() 手动取值:
- 直接用
for...of遍历索引:
for (const index of arr.keys()) {
console.log(index); // 输出 0, 1, 2
}
配合扩展运算符或 Array.from 转为数组
如果需要一次性拿到所有索引,可以用展开语法或 Array.from:
-
[...arr.keys()]→[0, 1, 2] -
Array.from(arr.keys())→ 同样得到索引数组 - 注意:稀疏数组中,
keys()仍会为每个合法索引生成值(不跳过空位),但不会包含超出当前长度的索引
与 entries() 和 values() 的区别
三者都返回迭代器,但内容不同:
立即学习“Java免费学习笔记(深入)”;
-
keys()→ 只有索引(0, 1, 2...) -
values()→ 只有元素值('a', 'b', 'c'...) -
entries()→ 键值对数组,如[0, 'a'], [1, 'b']...
实际小技巧:快速生成索引映射或校验长度
例如判断数组是否连续填充(无空位),可对比 keys() 迭代器长度与 arr.length:
console.log([...arr.keys()]); // [0, 1, 2] —— keys 不受空位影响,仍返回全部索引
console.log(arr.length); // 3,所以长度一致,不代表没有空位
真正检测空位要用 in 操作符或 hasOwnProperty,keys() 本身只反映索引范围。


















