SyntaxError: for-in loop head declarations may not have initializers

JavaScript 嚴格模式下才會出現的異常“for-in 迴圈頭宣告不能包含初始化器”,表示 for...in 迴圈的頭部包含一個初始化表示式,例如 for (var i = 0 in obj)。在嚴格模式下,for-in 迴圈中不允許這樣做。此外,像 for (const i = 0 in obj) 這樣帶有初始化器的詞法宣告在非嚴格模式下也不允許。

訊息

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)

錯誤型別

SyntaxError.

哪裡出錯了?

for...in 迴圈的頭部包含一個初始化表示式。也就是說,聲明瞭一個變數並賦值 for (var i = 0 in obj)。在非嚴格模式下,這個頭部宣告會被靜默忽略,並表現為 for (var i in obj)。然而,在嚴格模式下,會丟擲 SyntaxError。此外,像 for (const i = 0 in obj) 這樣帶有初始化器的詞法宣告在非嚴格模式下也不允許,並且始終會產生 SyntaxError

示例

此示例將丟擲 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

有效的 for-in 迴圈

你可以移除 for-in 迴圈頭部的初始化器 (i = 0)。

js
const obj = { a: 1, b: 2, c: 3 };

for (const i in obj) {
  console.log(obj[i]);
}

陣列迭代

for...in 迴圈不應用於陣列迭代。你是否打算使用 for 迴圈而不是 for-in 迴圈來迭代 Arrayfor 迴圈也允許你設定初始化器

js
const arr = ["a", "b", "c"];

for (let i = 2; i < arr.length; i++) {
  console.log(arr[i]);
}

// "c"

另見