Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Các quy tắc chèn dấu chấm phẩy tự động (ASI) trong JavaScript

JavaScript sử dụng cơ chế chèn dấu chấm phẩy tự động (Automatic Semicolon Insertion - ASI) để tự động bổ sung các dấu chấm phẩy (;) bị thiếu trong mã nguồn. Điều này giúp giảm thiểu lỗi cú pháp khi lập trình viên quên đặt dấu kết thúc câu lệnh.

Các câu lệnh bị ảnh hưởng bởi ASI

Theo đặc tả ECMAScript, ASI áp dụng cho các loại câu lệnh sau:

  • Câu lệnh rỗng (empty statement)
  • Câu lệnh khai báo biến (var statement)
  • Câu lệnh biểu thức (expression statement)
  • Câu lệnh do-while
  • Câu lệnh continue
  • Câu lệnh break
  • Câu lệnh return
  • Câu lệnh throw

Quy tắc chi tiết của ASI

Khi phân tích mã từ trái sang phải, trình phân tích cú pháp (parser) sẽ tự động chèn dấu chấm phẩy trong các trường hợp sau:

  1. Gặp token không hợp lệ: Khi gặp một token không được phép bởi ngữ pháp, dấu chấm phẩy sẽ được chèn trước token đó nếu thỏa mãn ít nhất một điều kiện:
    • Token gây lỗi là }.
    • Token trước đó là ) và dấu chấm phẩy chèn vào sẽ đóng vai trò kết thúc câu lệnh do-while.
  2. Kết thúc luồng token: Khi hết luồng token đầu vào mà parser không thể phân tích thành một Script hoặc Module hoàn chỉnh, dấu chấm phẩy sẽ được chèn tự động.
  3. Sản xuất bị hạn chế (restricted production): Khi gặp token được phép bởi ngữ pháp nhưng thuộc sản xuất bị hạn chế, và token đó là token đầu tiên của terminal/nonterminal ngay sau annotation, dấu chấm phẩy sẽ được chèn.

Ví dụ minh họa

// ASI tự động chèn dấu chấm phẩy
return
true;

// Được hiểu như:
return; true;

// Hoặc
a = b
++c

// Được hiểu như:
a = b;
++c;

Lời khuyên tốt nhất

Mặc dù ASI giúp mã linh hoạt, bạn nên luôn viết rõ ràng dấu chấm phẩy để tránh hành vi không mong muốn, đặc biệt khi:

  • Bắt đầu dòng bằng (, [, `, +, -, /
  • Sử dụng return, throw, break, continue với giá trị trên dòng mới

Hiểu rõ ASI giúp bạn gỡ lỗi hiệu quả hơn và viết JavaScript an toàn, dự đoán được.