Виняток, що викидається лише у строгому режимі JavaScript, "for-in loop head declarations may not have initializers", виникає, коли шапка циклу for...in містить вираз ініціалізації, наприклад |for (var i = 0 in obj)
|. Це не дозволено у циклах for-in у строгому режимі.
Повідомлення
SyntaxError: for-in loop head declarations cannot have an initializer (Edge) SyntaxError: for-in loop head declarations may not have initializers (Firefox) SyntaxError: for-in loop variable declaration may not have an initializer. (Chrome)
Тип помилки
SyntaxError
лише у строгому режимі.
Що сталось?
Шапка циклу for...in містить вираз ініціалізації. Тобто, було оголошено змінну та присвоєно їй значення |for (var i = 0 in obj)
|. У нестрогому режимі таке оголошення просто ігнорується та сприймається як |for (var i in obj)|
. Однак, у строгому режимі викидається помилка SyntaxError
.
Приклади
Цей приклад викидає помилку 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 declarations may not have initializers
Правильний цикл for-in
Ви можете прибрати ініціалізатор (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
для перебору масиву
? Цикл for
також дозволяє використання ініціалізатора:
var arr = [ "a", "b", "c" ]
for (var i = 2; i < arr.length; i++) {
console.log(arr[i]);
}
// "c"