This page was translated from English by the community.Learn more and join the MDN Web Docs community.
SyntaxError: for-in loop head declarations may not have initializers
Исключение "for-in loop head declarations may not have initializers" возникаетв строгом режиме, когда в управляющей конструкции циклаfor...in присваивается значение переменной-итератору, напримерfor (var i = 0 in obj). В нестрогом режиме также будет возникать исключение, если переменная-итератор объявлена черезconst, напримерfor (const i = 0 in obj).
In this article
Сообщение
SyntaxError: for-in loop variable declaration may not have an initializer. (V8-based)SyntaxError: for-in loop head declarations may not have initializers (Firefox)SyntaxError: a lexical declaration in the head of a for-in loop can't have an initializer (Firefox)SyntaxError: Cannot assign to the loop variable inside a for-in loop header. (Safari)
Тип ошибки
SyntaxError только в строгом режиме.
Что не так?
Управляющая конструкция циклаfor...in содержит выражение инициализации. Другими словами, при создании цикла присваивается значение переменной-итератору. В нестрогом режиме эта конструкция игнорируется, а поведение равноfor (var i = 0 in obj). Встрогом же режиме, будет ошибка синтаксисаSyntaxError. Однако, даже в нестрогом режиме присвоение значения переменной-итератору, объявленной черезconst, вродеfor (const i = 0 in obj), приведёт к ошибке синтаксисаSyntaxError.
Примеры
Данный пример приведёт к ошибке синтаксиса:
"use strict";const obj = { a: 1, b: 2, c: 3 };for (const i = 0 in obj) { console.log(obj[i]);}// SyntaxError: for-in loop head declarations may not have initializersПравильный цикл for-in
Нужно удалить присвоение значения (i = 0) из инициализации цикла for-in.
"use strict";const obj = { a: 1, b: 2, c: 3 };for (const i in obj) { console.log(obj[i]);}Итерация массива
Цикл for...in не должен использоваться для итерации массива. Вы намеревались использовать цикл for вместо цикла for-in для итерацииArray? Цикл for позволяет также установить инициализатор:
const arr = ["a", "b", "c"];for (let i = 2; i < arr.length; i++) { console.log(arr[i]);}// "c"