---
url: /docs/guide/usage/linter/rules/typescript/no-for-in-array.md
---

### 它的作用

此规则禁止使用 for-in 循环遍历数组。

### 为什么这不好？

for-in 循环会遍历对象的可枚举属性，这不仅包括数组索引，还包括添加到数组原型或数组实例上的任何可枚举属性。在遍历数组时，这几乎从来不是你想要的行为。

### 示例

此规则的**错误**代码示例：

```ts
const arr = [1, 2, 3];

for (const i in arr) {
  console.log(arr[i]);
}

for (const i in arr) {
  console.log(i, arr[i]);
}
```

此规则的**正确**代码示例：

```ts
const arr = [1, 2, 3];

// 使用 for-of 遍历数组值
for (const value of arr) {
  console.log(value);
}

// 使用带索引的普通 for 循环
for (let i = 0; i < arr.length; i++) {
  console.log(i, arr[i]);
}

// 使用 forEach
arr.forEach((value, index) => {
  console.log(index, value);
});

// for-in 适用于对象
const obj = { a: 1, b: 2 };
for (const key in obj) {
  console.log(key, obj[key]);
}
```

## 如何使用

## 版本

此规则在 v1.12.0 中添加。

## 参考资料
