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
in strict mode only.
The head of a for...in 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 strict mode, however, a SyntaxError
is thrown.
This example throws a 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
You can remove the initializer (i = 0
) in the head of the for-in loop.
"use strict"; var obj = {a: 1, b: 2, c: 3 }; for (var i in obj) { console.log(obj[i]); }
The for...in loop shouldn't be used for Array iteration. Did you intend to use a for
loop instead of a for-in
loop to iterate an Array
? The for
loop allows you to set an initializer then as well:
var arr = [ "a", "b", "c" ] for (var i = 2; i < arr.length; i++) { console.log(arr[i]); } // "c"
for...in
for...of
– also disallows an initializer in both strict and non-strict mode.for
– preferred for array iteration, allows to define an initializer.
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_for-in_initializer