## 消息

    警告: JavaScript 1.6's 版本的for-each-in遍历不再赞成使用; 建议用 ES6的 for-of 替换

## 错误类型

警告

## 出了什么问题?

JavaScript 1.6's `for each (variable in obj)`语法不赞成使用, 将在未来版本移除它。

## 实例

### 遍历对象

`for each...in` 用来遍历指定对象.

#### 不赞成这么使用

var object = { a: 10, b: 20 };

for each (var x in object) {
console.log(x); // 10
// 20
}

#### 替换语法

你可以使用 `for...in` 遍历指定对象, 获取每次循环的值:

    var object = { a: 10, b: 20 };

    for (var key in object) {
      var x = object[key];
      console.log(x);        // 10
                             // 20
    }

也可以使用{jsxref("Statements/for...of", "for...of")}} (ES2015) 和 `Object.values` (ES2017), 你可以获取指定对象的值得数组然后像这样遍历它:

    var object = { a: 10, b: 20 };

    for (var x of Object.values(object)) {
      console.log(x);        // 10
                             // 20
    }

### 数组遍历

`for each...in` 被用于遍历制定数组.

#### 不赞成这么使用

var array = [10, 20, 30];

for each (var x in array) {
console.log(x); // 10
// 20
// 30
}

#### 替换语法

现在最好用`for...of` (ES2015) 替换

    var array = [10, 20, 30];

    for (var x of array) {
      console.log(x);        // 10
                             // 20
                             // 30
    }

### 遍历一个空数组

`for each...in` 如果指定值是 `null` o或 `undefined什么都遍历不出来。` `for...of` 在这种情况会抛出异常.

#### 不赞成这么使用

function func(array) {
for each (var x in array) {
console.log(x);
}
}
func([10, 20]); // 10
// 20
func(null); // prints nothing
func(undefined); // prints nothing

#### 替换语法

用`for...of` 重写`for each...in` 后值可以为 `null` 和 `undefined` ，同时你需要警惕`for...of`抛出的异常.

    function func(array) {
      if (array) {
        for (var x of array) {
          console.log(x);
        }
      }
    }
    func([10, 20]);        // 10
                           // 20
    func(null);            // prints nothing
    func(undefined);       // prints nothing

### 遍历对象键值对

#### 不赞成这么使用

不赞成使用`for each...in`和`Iterator` 对象来遍历指定对象的键值对.

var object = { a: 10, b: 20 };

for each (var [key, value] in Iterator(object)) {
console.log(key, value); // "a", 10
// "b", 20
}

#### 替换语法

你可以使用 `for...in` 遍历指定对象,获取每次循环的值:

    var object = { a: 10, b: 20 };

    for (var key in object) {
      var value = object[key];
      console.log(key, value);  // "a", 10
                                // "b", 20
    }

也可以使用{jsxref("Statements/for...of", "for...of")}} (ES2015) 和 `Object.values` (ES2017), 你可以获取指定对象的值得数组然后像这样遍历它:

    var object = { a: 10, b: 20 };

    for (var [key, value] of Object.entries(object)) {
      console.log(key, value);  // "a", 10
                                // "b", 20
    }

## 参见

- `for...of`
- `Object.values`
- `Object.entries`