第 363 篇 · 第 14 卷 前端,沒有極限 2026 年 7 月 16 日 · 台北
ls -lt ./posts --since=2013 REC · node 363 · uplink

development

JavaScript 表達式觀念及運用 - JS Expression

2020 年 09 月 17 日 · 5 分鐘閱讀 · By Wang Casper

JavaScript 分為兩大的語句類型,就像是我們日常語言中的動詞、名詞、連接詞等概念,但在 JS 中僅分為兩大類型,分別為「陳述式」及「表達式」,其中表達式更為重要,如果能夠熟練表達式更能解決許多開發上的問題,也更能活用各種語法。

JavaScript 中的表達式原文為 「Expression」,翻譯上常見的有表達式、表示式、運算式等等。

表達式與陳述式的差異

表達式及陳述式在各文件上都有概略提到,但通常不會讓人覺得是重要的篇章,所以快速略過。不過在 JavaScript 的運用中,如果熟練「表達式」的觀念,將能增加許多運用的技巧且能避免許多不必要的錯誤。

  • 陳述式:會執行一些程式碼,可能是幾個單詞或是一個片段(但不會是單一個字母),但最大的特徵是不會回傳結果
  • 表達式:最大的特徵在於會回傳結果

陳述式 Statement

陳述式有幾大分類,如:

  • 宣告(var、function)
  • 流程控制(block、if…else)
  • 迴圈(for、for…in)
  • 其它(import, export)

完整分類可參考 MDN

陳述式可能是幾個單詞或是一個片段(但不會是單一個字母),其中也會混合到表達式的詞彙,所以當我們撰寫一段程式碼如下即可稱為陳述式(注意:是 var a ,而不是 var 也不是 a),用此語法即可宣告一個變數。

var a;

相同的道理,如果我們僅有使用 {} 這個意思是「物件」,這不會是一個陳述式,必須在其中加入一些片段程式碼才會是陳述式,結構如下:

{
  console.log(a);
}

陳述式先了解至此即可,我們先來看表達式。

表達式 Expression

表達式的特點就是會回傳一個結果,所以任何可回傳結果都可稱為表達式(這句話看起來就是一段廢話,但實際運作時卻常常讓人有錯誤的判斷)。常見如下:

  • 純值
  • 變數
  • 運算子
  • 執行函式
  • 正規表達式
  • 函式表達式

表達式的重點在於「回傳結果」,因此是否能夠回傳結果就能判斷該語句或詞是否為表達式,我們用數字 1 來解釋什麼是回傳結果。

1

直接打開你的 Chrome 的開發者工具,將上面的數字 1 貼到開發者工具內後按下 Enter,你會看到兩個數字 1 分別如下顯示:

因此在這之中數字 1 就是表達式(是的,單一個純值就是表達式),接下來加入一些運算子增加這段程式的複雜度,使用兩個數字 1 來進行比對。

1 === 1

接下來會得到 true 的結果,所以 1 === 1 是屬於表達式。

相同的概念,如果定義了一個函式並運行它,那麼運行所回傳的結果也會稱為表達式。

// 函式陳述式宣告一個函式
function fn() {
  return 1;
};

// 呼叫函式
fn();

容易搞混的地方

“式” 這個字在中文通常表示為一段文字,所以我們常會誤解表達式、陳述式代表的是一個完整片段;而實際運作上陳述式大多是一個片段或詞彙沒錯,但表達式可以獨立出現,也可與陳述式混合使用。

以下片段程式碼整體來說是屬於陳述式(運作上不會回傳結果),但其中會夾雜許多表達式的語句。

if (a) {
  fn(); // 函式呼叫後會回傳結果,因此也屬於表達式
}

圖解案例:

當然,還有多個表達式混合的概念,如運算子本身就是由多個表達式組成,常見的「二元運算子」,就是由一個運算子加上前後的運算元所組成,而運算元也是屬於表達式的一種。關於運算子可參考

運算元1 運算子 運算元2

範例如下:

1 === 1;

所以在此範例中,也可以將運算元替換成 “呼叫函式” 或 “任何的表達式”。

function fn() {
  return 1;
};
fn() === fn();

哪邊可以看到表達式

相對於死板板的陳述式來說,表達式相當靈活且無所不在,當我們在查找文件中都可看到相對應的蹤影,在此先記得 “expression” 這個單字。

記得:你可以將文件中的 expression 語句替換成任何喜歡的表達式來執行,但絕不能替換成陳述式(statement)。

案例:if 陳述式

文件:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else

文件中說明 if 陳述式中的結構如下:

if (condition)
   statement1
[else
   statement2]

其中包含了 condition(條件式) 及 statement(陳述式) 這兩個語句,再往下可以看到針對這兩個語句的說明。

condition: An expression that is considered to be either truthy or falsy.
判斷式:一個表達式,它的值會被判定為真值或假值。

因此 if 後方的條件式可以使用任何的表達式進行替代,因此可以如下的方式替換(替換成呼叫函式、各種運算子都是沒有問題的)。

if (1 + 1) {
  console.log('1 + 1 為真值')
}

只要把握此原則就可以進行任何的替換,但絕對不能替換成陳述式,陳述式則會出現語法上的錯誤。

if (var a = 1) {
  // ...
}

結語

表達式在 JavaScript 是看似簡單的觀念,但了解以後可以更靈活運用許多語法,除此之外有許多的設計模式及觀念,也都是必須靈活運用表達式才可達成。

本篇附上幾個題目,大家可試著猜看看該片段程式碼屬於 “陳述式” 或 “表達式” 喔

題目 1:

var object;

題目 2:

new Object(1);