Warning: JavaScript 1.6's for-each-in loops are deprecated

消息

警告: 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...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抛出的异常.

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

遍历对象键值对

不赞成这么使用

 不赞成使用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
}

参见