SyntaxError: for-in loop head declarations may not have initializers
Ngoại lệ JavaScript chỉ xảy ra ở chế độ nghiêm ngặt
"for-in loop head declarations may not have initializers"
xảy ra khi phần đầu của vòng lặp for...in chứa
một biểu thức khởi tạo, chẳng hạn như for (var i = 0 in obj). Điều này không
được phép trong vòng lặp for-in ở chế độ nghiêm ngặt. Ngoài ra, các khai báo từ khóa có khởi tạo như for (const i = 0 in obj) cũng không được phép kể cả ngoài chế độ nghiêm ngặt.
Thông báo
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)
Loại lỗi
Nguyên nhân?
Phần đầu của vòng lặp for...in chứa một biểu thức khởi tạo.
Tức là, một biến được khai báo và gán giá trị for (var i = 0 in obj).
Trong chế độ không nghiêm ngặt, khai báo này trong phần đầu bị bỏ qua âm thầm và hoạt động như for (var i in obj).
Tuy nhiên, trong chế độ nghiêm ngặt, một SyntaxError được ném ra. Ngoài ra, các khai báo từ khóa có khởi tạo như for (const i = 0 in obj) cũng không được phép kể cả ngoài chế độ nghiêm ngặt, và luôn tạo ra SyntaxError.
Ví dụ
Ví dụ này ném ra 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
Vòng lặp for-in hợp lệ
Bạn có thể bỏ phần khởi tạo (i = 0) trong phần đầu của vòng lặp for-in.
const obj = { a: 1, b: 2, c: 3 };
for (const i in obj) {
console.log(obj[i]);
}
Duyệt mảng
Vòng lặp for...in không nên được dùng để duyệt mảng.
Bạn có muốn dùng vòng lặp for
thay vì vòng lặp for-in để duyệt qua Array không? Vòng lặp
for cho phép bạn đặt một biểu thức khởi tạo như thế này:
const arr = ["a", "b", "c"];
for (let i = 2; i < arr.length; i++) {
console.log(arr[i]);
}
// "c"