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)
錯誤型別
哪裡出錯了?
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 迴圈來迭代 Array?for 迴圈也允許你設定初始化器
js
const arr = ["a", "b", "c"];
for (let i = 2; i < arr.length; i++) {
console.log(arr[i]);
}
// "c"