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

SyntaxError.

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:

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

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.

js
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:

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

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

// "c"

Xem thêm