--- 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 --- <div>{{jsSidebar("Errors")}}</div> <h2 id="Message">Message</h2> <pre class="syntaxbox">SyntaxError: объявления for-in loop head не могут иметь инициализатора (Edge) SyntaxError: объявления for-in loop head могут не иметь инициализаторов (Firefox) SyntaxError: объявление переменной цикла for-in может не иметь инициализатора. (Chrome) </pre> <h2 id="Тип_ошибки">Тип ошибки</h2> <p>{{jsxref("SyntaxError")}} только в строгом режиме.</p> <h2 id="Что_пошло_не так">Что пошло не так?</h2> <p>Глава цикла <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a> содержит выражение инициализатора. То есть переменная объявляется и присваивается значение <code>|for (var i = 0 in obj)|</code>. В нестрогом режиме это объявление head игнорируется и ведёт себя как <code>|for (var i in obj)|</code>. Однако в строгом режиме создаётся синтаксическая ошибка.</p> <h2 id="Примеры">Примеры</h2> <p>Данный пример даёт SyntaxError:</p> <pre class="brush: js example-bad">"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 могут не иметь инициализаторов </pre> <h3 id="Правильный_for-in_loop">Правильный for-in loop</h3> <p>Можно удалить инициализатор (i = 0) в начале цикла for-in.</p> <pre class="brush: js example-good">"use strict"; var obj = {a: 1, b: 2, c: 3 }; for (var i in obj) { console.log(obj[i]); } </pre> <h3 id="Итерация_массива">Итерация массива</h3> <p>Цикл for...in не должен использоваться для итерации массива. Вы намеревались использовать цикл for вместо цикла for-in для итерации {{jsxref("Array")}}? Цикл for позволяет также установить инициализатор:</p> <pre class="brush: js example-good">var arr = [ "a", "b", "c" ] for (var i = 2; i < arr.length; i++) { console.log(arr[i]); } // "c"</pre> <h2 id="Смотрите_также">Смотрите также</h2> <ul> <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a></code></li> <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of">for...of</a></code> – также запрещает инициализатор как в строгом, так и в нестрогом режиме.</li> <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for">for</a></code> – предпочтительно для итерации массива, позволяет определить инициализатор.</li> </ul>