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)
.
The head of a
loop contains an initializer expression. That is, a variable is declared and assigned a value for (var i = 0 in obj). In non-strict mode, this head declaration is silently ignored and behaves like for (var i in obj). In
, however, a SyntaxError is thrown. In addition, lexical declarations with initializers like for (const i = 0 in obj) are not allowed outside strict mode either, and will always produce a SyntaxError.
This example throws a SyntaxError:
js
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
You can remove the initializer (i = 0) in the head of the for-in loop.
js
const obj = { a: 1, b: 2, c: 3 }; for (const i in obj) { console.log(obj[i]); }
The for...in loop
shouldn't be used for Array iteration
. Did you intend to use a
loop instead of a for-in loop to iterate an
? The for loop allows you to set an initializer then as well:
js
const arr = ["a", "b", "c"]; for (let i = 2; i < arr.length; i++) { console.log(arr[i]); } // "c"