SyntaxError: for-in loop head declarations may not have initializers(SyntaxError: объявления for-in loop head могут не иметь инициализаторов)

Вы читаете английскую версию этой статьи, так как пока нет перевода на данный язык. Помогите нам перевести эту статью!

Message

SyntaxError: объявления for-in loop head не могут иметь инициализатора (Edge)
SyntaxError: объявления for-in loop head могут не иметь инициализаторов (Firefox)
SyntaxError: объявление переменной цикла for-in может не иметь инициализатора. (Chrome)

Тип ошибки

SyntaxError только в строгом режиме.

Что пошло нетак?

Глава цикла for...in содержит выражение инициализатора. То есть переменная объявляется и присваивается значение |for (var i = 0 in obj)|. В нестрогом режиме это объявление head игнорируется и ведет себя как |for (var i in obj)|. Однако в строгом режиме создается синтаксическая ошибка.

Примеры

Данный пример дает SyntaxError:

"use strict";

var obj = {a: 1, b: 2, c: 3 }; 

for (var i = 0 in obj) { 
  console.log(obj[i]);
}

 SyntaxError: объявления for-in loop head могут не иметь инициализаторов

Правильный for-in loop

Можно удалить инициализатор (i = 0) в начале цикла for-in.

"use strict";

var obj = {a: 1, b: 2, c: 3 };

for (var i in obj) {
  console.log(obj[i]);
}

Итерация массива

Цикл for...in не должен использоваться для итерации массива. Вы намеревались использовать цикл for вместо цикла for-in для итерации Array? Цикл for позволяет также установить инициализатор:

var arr = [ "a", "b", "c" ] 

for (var i = 2; i < arr.length; i++) { 
  console.log(arr[i]); 
}

// "c"

Смотри также

  • for...in
  • for...of – также запрещает инициализатор как в строгом, так и в нестрогом режиме.
  • for –  предпочтительно для итерации массива, позволяет определить инициализатор.