Предупреждение: циклы JavaScript 1.6 for-each-in устарели

Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

Сообщение

Предупреждение: циклы JavaScript 1.6 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
}

Or, using for...of (ES2015) and 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 или 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 each...in операторы, чтобы значения могли быть null или undefined сfor...of также необходимо охранять 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
}

Или, использовать for...of (ES2015) и Object.entries (ES2017), можно получить массив указанных значений объекта и выполнить итерацию по массиву следующим образом:

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

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

Смотрите также

Метки документа и участники

Внесли вклад в эту страницу: mdnwebdocs-bot, MakarovDs777
Обновлялась последний раз: mdnwebdocs-bot,