--- title: >- SyntaxError: for-in loop head declarations may not have initializers(SyntaxError: объявления for-in loop head могут не иметь инициализаторов) slug: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer translation_of: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer ---
SyntaxError: объявления for-in loop head не могут иметь инициализатора (Edge) SyntaxError: объявления for-in loop head могут не иметь инициализаторов (Firefox) SyntaxError: объявление переменной цикла for-in может не иметь инициализатора. (Chrome)
{{jsxref("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 могут не иметь инициализаторов
Можно удалить инициализатор (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 для итерации {{jsxref("Array")}}? Цикл for позволяет также установить инициализатор:
var arr = [ "a", "b", "c" ] for (var i = 2; i < arr.length; i++) { console.log(arr[i]); } // "c"