Statements and declarations
Các ứng dụng JavaScript bao gồm các câu lệnh với cú pháp phù hợp. Một câu lệnh duy nhất có thể trải dài nhiều dòng. Nhiều câu lệnh có thể xuất hiện trên một dòng nếu mỗi câu lệnh được phân tách bằng dấu chấm phẩy. Đây không phải là một từ khóa, mà là một nhóm các từ khóa.
Câu lệnh và khai báo theo danh mục
Để xem danh sách theo thứ tự bảng chữ cái, hãy xem thanh bên bên trái.
Luồng điều khiển
return-
Chỉ định giá trị được trả về bởi một hàm.
break-
Kết thúc vòng lặp hiện tại, câu lệnh switch, hoặc câu lệnh nhãn và chuyển quyền điều khiển chương trình đến câu lệnh theo sau câu lệnh đã kết thúc.
continue-
Kết thúc việc thực thi các câu lệnh trong lần lặp hiện tại của vòng lặp hiện tại hoặc vòng lặp được đặt tên, và tiếp tục thực thi vòng lặp với lần lặp tiếp theo.
throw-
Ném một ngoại lệ do người dùng định nghĩa.
if...else-
Thực thi một câu lệnh nếu một điều kiện được chỉ định là đúng. Nếu điều kiện sai, một câu lệnh khác có thể được thực thi.
switch-
Đánh giá một biểu thức, so khớp giá trị của biểu thức với một mệnh đề case, và thực thi các câu lệnh liên kết với case đó.
try...catch-
Đánh dấu một khối câu lệnh để thử, và chỉ định một phản hồi, nếu một ngoại lệ được ném ra.
Khai báo biến
var-
Khai báo một biến, tùy chọn khởi tạo nó với một giá trị.
let-
Khai báo một biến cục bộ phạm vi block, tùy chọn khởi tạo nó với một giá trị.
const-
Khai báo một hằng số có tên chỉ đọc.
using-
Khai báo các biến cục bộ được dispose đồng bộ.
await using-
Khai báo các biến cục bộ được dispose bất đồng bộ.
Hàm và lớp
function-
Khai báo một hàm với các tham số được chỉ định.
function*-
Generator Function cho phép viết iterator dễ dàng hơn.
async function-
Khai báo một async function với các tham số được chỉ định.
async function*-
Asynchronous Generator Function cho phép viết async iterator dễ dàng hơn.
class-
Khai báo một lớp.
Vòng lặp
do...while-
Tạo một vòng lặp thực thi một câu lệnh được chỉ định cho đến khi điều kiện kiểm tra đánh giá thành false. Điều kiện được đánh giá sau khi thực thi câu lệnh, kết quả là câu lệnh được chỉ định thực thi ít nhất một lần.
for-
Tạo một vòng lặp bao gồm ba biểu thức tùy chọn, được bao bởi dấu ngoặc đơn và phân tách bằng dấu chấm phẩy, theo sau là một câu lệnh được thực thi trong vòng lặp.
for...in-
Lặp qua các thuộc tính có thể đếm được của một đối tượng, theo thứ tự tùy ý. Đối với mỗi thuộc tính riêng biệt, các câu lệnh có thể được thực thi.
for...of-
Lặp qua các đối tượng iterable (bao gồm mảng, các đối tượng giống mảng, iterator và generator), gọi một hook lặp tùy chỉnh với các câu lệnh để thực thi cho giá trị của mỗi thuộc tính riêng biệt.
for await...of-
Lặp qua các đối tượng async iterable, các đối tượng giống mảng, iterator và generator, gọi một hook lặp tùy chỉnh với các câu lệnh để thực thi cho giá trị của mỗi thuộc tính riêng biệt.
while-
Tạo một vòng lặp thực thi một câu lệnh được chỉ định miễn là điều kiện kiểm tra đánh giá thành true. Điều kiện được đánh giá trước khi thực thi câu lệnh.
Khác
- Empty
-
Câu lệnh rỗng được dùng để không cung cấp câu lệnh nào, mặc dù cú pháp JavaScript có thể yêu cầu một câu lệnh.
- Block
-
Câu lệnh block được dùng để nhóm không hoặc nhiều câu lệnh. Block được phân giới bởi một cặp dấu ngoặc nhọn.
- Expression statement
-
Câu lệnh biểu thức đánh giá một biểu thức và loại bỏ kết quả của nó. Nó cho phép biểu thức thực hiện các side effect, chẳng hạn như thực thi một hàm hoặc cập nhật một biến.
debugger-
Gọi bất kỳ chức năng gỡ lỗi nào hiện có. Nếu không có chức năng gỡ lỗi nào, câu lệnh này không có tác dụng.
export-
Được dùng để xuất các hàm để có thể nhập trong các module bên ngoài, và các script khác.
import-
Được dùng để nhập các hàm được xuất từ một module bên ngoài, một script khác.
- label
-
Cung cấp cho một câu lệnh một định danh mà bạn có thể tham chiếu bằng cách sử dụng câu lệnh
breakhoặccontinue. withDeprecated-
Mở rộng chuỗi phạm vi cho một câu lệnh.
Sự khác biệt giữa câu lệnh và khai báo
Trong phần này, chúng ta sẽ kết hợp hai loại cấu trúc: câu lệnh và khai báo. Chúng là hai tập hợp ngữ pháp rời rạc. Sau đây là các khai báo:
letconstfunctionfunction*async functionasync function*classexport(Lưu ý: nó chỉ có thể xuất hiện ở top-level của một module)import(Lưu ý: nó chỉ có thể xuất hiện ở top-level của một module)
Tất cả mọi thứ khác trong danh sách ở trên là câu lệnh.
Các thuật ngữ "câu lệnh" và "khai báo" có ý nghĩa chính xác trong cú pháp hình thức của JavaScript ảnh hưởng đến nơi chúng có thể được đặt trong code. Ví dụ, trong hầu hết các cấu trúc luồng điều khiển, phần thân chỉ chấp nhận câu lệnh—chẳng hạn như hai nhánh của if...else:
if (condition)
statement1;
else
statement2;
Nếu bạn sử dụng khai báo thay vì câu lệnh, đó sẽ là SyntaxError. Ví dụ, một khai báo let không phải là câu lệnh, vì vậy bạn không thể sử dụng nó ở dạng trần làm phần thân của câu lệnh if.
if (condition)
let i = 0; // SyntaxError: Lexical declaration cannot appear in a single-statement context
Mặt khác, var là một câu lệnh, vì vậy bạn có thể sử dụng nó một mình làm phần thân if.
if (condition)
var i = 0;
Bạn có thể coi khai báo là "binding định danh với giá trị", và câu lệnh là "thực hiện các hành động". Thực tế là var là câu lệnh thay vì khai báo là một trường hợp đặc biệt, vì nó không tuân theo các quy tắc phạm vi từ vựng thông thường và có thể tạo ra các side effect—ở dạng tạo ra các biến toàn cục, biến đổi các biến đã được định nghĩa bởi var, và định nghĩa các biến có thể nhìn thấy bên ngoài block của nó (vì các biến được định nghĩa bởi var không có phạm vi block).
Như một ví dụ khác, nhãn chỉ có thể được gắn vào câu lệnh.
label: const a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
Note: Có một ngữ pháp cũ cho phép khai báo hàm có nhãn, nhưng nó chỉ được chuẩn hóa để tương thích với thực tế của web.
Để khắc phục điều này, bạn có thể bọc khai báo trong dấu ngoặc nhọn—điều này làm cho nó trở thành một phần của câu lệnh block.
label: {
const a = 1;
}
if (condition) {
let i = 0;
}