不推荐用 for in 遍历数组下标,因其遍历所有可枚举的自有和继承属性,可能导致遍历到原型属性、非数字键或顺序错乱;推荐使用传统 for 循环或数组专用方法。

不推荐用 for in 遍历数组下标,因为它本质是遍历对象的可枚举属性名,对数组会出问题:可能遍历到原型链上的属性、顺序不保证、还会遍历非数字键(比如手动添加的属性或方法)。
为什么 for in 不适合数组
数组在 JavaScript 中是对象,for in 会遍历所有**可枚举的自有和继承属性**,不只是数字索引:
- 下标(如
"0"、"1")会被当作字符串键遍历,但顺序不保证(尤其在旧引擎中) - 如果给数组加了自定义属性(如
arr.name = "myList"),它也会被遍历到 - 如果数组原型被扩展(如
Array.prototype.customMethod = function(){}),且该属性可枚举,也会出现
正确遍历数组下标的推荐方式
用专为数组设计的方法,语义清晰、行为确定:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
传统 for 循环:最直接,性能好,明确控制索引
for (let i = 0; i -
for of + entries():获取 [index, value] 对,适合需要下标和值的场景
for (const [i, val] of arr.entries()) { console.log(i); } -
Object.keys(arr):返回字符串形式的下标数组(仅数字索引),再遍历
Object.keys(arr).forEach(i => console.log(Number(i))); // i 是字符串,需转数字
如果非要用 for in(不建议),至少加防护
仅当必须兼容极老环境且能完全控制数组状态时,可加过滤:
立即学习“Java免费学习笔记(深入)”;
- 用
hasOwnProperty排除原型属性 - 用
Number.isInteger(+key)或正则/^\d+$/.test(key)确保是有效数字下标 - 检查
key < arr.length防止稀疏数组中遍历到不存在的索引
示例(不推荐但可用):
for (const key in arr) {<br> if (arr.hasOwnProperty(key) && /^\d+$/.test(key) && key < arr.length) {<br> console.log(Number(key));<br> }<br>}

















