SyntaxError: as declarações da cabeça do laço for-in podem não ter inicializadores
O JavaScript em modo estrito-somente exceção
"as declarações for-in loop head podem não ter inicializadores"
isso ocorre quando a cabeça de um for...in contém
uma expressão inicializadora, tal como for (var i = 0 in obj)
. Isto não é
permitido em laços for-in em modo estrito. Além disso, declarações léxicas com inicializadores como for (const i = 0 in obj)
também não são permitidas fora do modo estrito.
Mensagem
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)
Tipo de erro
O que ocorreu errado?
A cabeça de um laço for...in contém uma expressão inicializadora.
Ou seja, uma variável é declarada e atribuída um valor for (var i = 0 in obj)
.
No modo não estrito, esta declaração de cabeça é silenciosamente ignorada e comporta-se como for (var i in obj)
.
No modo estrito, contudo, é lançado um SyntaxError
. Além disso, declarações léxicas com inicializadores como for (const i = 0 in obj)
também não são permitidas fora do modo estrito, e produzirão sempre um SyntaxError
.
Exemplos
Esse exemplo lança um SyntaxError
:
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
Laço for-in válido
Pode remover o inicializador (i = 0
) na cabeça do laço de entrada.
const obj = { a: 1, b: 2, c: 3 };
for (const i in obj) {
console.log(obj[i]);
}
Iteração de array
O laço for...in não deve ser usado para iteração de Array.
Pretendia utilizar um laço for
em vez de um laço for-in
para iterar um Array
? O
laço for
permite também definir um inicializador então:
const arr = ["a", "b", "c"];
for (let i = 2; i < arr.length; i++) {
console.log(arr[i]);
}
// "c"