語句和宣告

JavaScript 應用程式由具有適當語法的語句組成。單個語句可以跨越多行。如果每個語句都用分號分隔,則多個語句可以出現在同一行上。這並不是一個關鍵字,而是一組關鍵字。

按類別劃分的語句和宣告

如需按字母順序列出,請參見左側邊欄。

控制流

return

指定函式要返回的值。

break

終止當前迴圈、switch 或 label 語句,並將程式控制轉移到終止語句之後的語句。

continue

終止當前迴圈或帶標籤迴圈的當前迭代中的語句執行,並繼續執行迴圈的下一次迭代。

throw

丟擲使用者定義的異常。

if...else

如果指定條件為真,則執行一個語句。如果條件為假,則可以執行另一個語句。

switch

評估一個表示式,將表示式的值與一個 case 子句匹配,並執行與該 case 關聯的語句。

try...catch

標記一個要嘗試的語句塊,並指定在丟擲異常時如何響應。

宣告變數

var

宣告一個變數,可選擇將其初始化為一個值。

let

宣告一個塊作用域區域性變數,可選擇將其初始化為一個值。

const

宣告一個只讀的命名常量。

using

宣告同步處理的區域性變數。

await using

宣告非同步處理的區域性變數。

函式和類

function

宣告一個具有指定引數的函式。

function*

生成器函式使編寫迭代器變得更容易。

async function

宣告一個具有指定引數的非同步函式。

async function*

非同步生成器函式使編寫非同步迭代器變得更容易。

class

宣告一個類。

迭代

do...while

建立一個迴圈,執行指定的語句,直到測試條件評估為假。條件在執行語句後評估,導致指定語句至少執行一次。

for

建立一個迴圈,該迴圈由三個可選表示式組成,用括號括起來並用分號分隔,後跟在迴圈中執行的語句。

for...in

以任意順序迭代物件的列舉屬性。對於每個不同的屬性,可以執行語句。

for...of

迭代可迭代物件(包括陣列、類陣列物件、迭代器和生成器),呼叫自定義迭代鉤子,並執行針對每個不同屬性值要執行的語句。

for await...of

迭代非同步可迭代物件、類陣列物件、迭代器和生成器,呼叫自定義迭代鉤子,並執行針對每個不同屬性值要執行的語句。

while

建立一個迴圈,只要測試條件評估為真,就執行指定的語句。條件在執行語句之前評估。

其他

空語句用於在 JavaScript 語法預期有語句時提供一個空語句。

塊(Block)

塊語句用於將零個或多個語句分組。塊由一對花括號分隔。

表示式語句

表示式語句評估一個表示式並丟棄其結果。它允許表示式執行副作用,例如執行函式或更新變數。

debugger

呼叫任何可用的除錯功能。如果沒有可用的除錯功能,此語句不產生任何效果。

export

用於匯出函式,使其可供外部模組和其他指令碼匯入。

import

用於匯入從外部模組、另一個指令碼匯出的函式。

label

為語句提供一個識別符號,您可以使用 breakcontinue 語句引用該識別符號。

with 已棄用

擴充套件語句的作用域鏈。

語句和宣告之間的區別

在本節中,我們將混合兩種構造:語句宣告。它們是兩個不相交的語法集合。以下是宣告:

上面列表中的其他所有內容都是語句。

"語句"和"宣告"這兩個術語在 JavaScript 的正式語法中具有精確的含義,這會影響它們在程式碼中的位置。例如,在大多數控制流結構中,主體只接受語句——例如 if...else 的兩個分支。

js
if (condition)
  statement1;
else
  statement2;

如果您使用宣告而不是語句,則會引發 SyntaxError。例如,let 宣告不是語句,因此您不能在 if 語句的主體中以其裸露形式使用它。

js
if (condition)
  let i = 0; // SyntaxError: Lexical declaration cannot appear in a single-statement context

另一方面,var 是一個語句,所以您可以單獨使用它作為 if 主體。

js
if (condition)
  var i = 0;

您可以將宣告視為“將識別符號繫結到值”,將語句視為“執行操作”。var 是語句而不是宣告是一個特例,因為它不遵循正常的詞法作用域規則,並且可能產生副作用——以建立全域性變數、修改現有 var 定義的變數以及定義在其塊外部可見的變數(因為 var 定義的變數不是塊作用域的)的形式。

作為另一個例子,標籤只能附加到語句。

js
label: const a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context

注意:有一個遺留語法允許函式宣告帶有標籤,但這只是為了與 Web 現實相容而標準化的。

為了解決這個問題,您可以將宣告用大括號括起來——這使得它成為塊語句的一部分。

js
label: {
  const a = 1;
}

if (condition) {
  let i = 0;
}

瀏覽器相容性

另見