JavaScript switch...case 語句

在本教程中,你將學習如何使用 switch ... case 語句來測試或評估 JavaScript 中具有不同值的表示式。

JavaScript switch...case 語句

switch...case 語句表達了一種 if...else if...else 語句的替代,該語句做幾乎同樣的事情。switch...case 語句測試針對一系列值的變數或表示式,直到找到一個匹配,然後執行的程式碼對應於該匹配的塊。它的語法是:

switch(x){
    case value1:
        // Code to be executed if x === value1
        break;
    case value2:
        // Code to be executed if x === value2
        break;
    ...
    default:
        // Code to be executed if x is different from all values
}

請考慮以下示例,該示例顯示星期幾的名稱。

var d = new Date();
    
switch(d.getDay()) {
    case 0:
        alert("Today is Sunday.");
        break;
    case 1:
        alert("Today is Monday.");
        break;
    case 2:
        alert("Today is Tuesday.");
        break;
    case 3:
        alert("Today is Wednesday.");
        break;
    case 4:
        alert("Today is Thursday.");
        break;
    case 5:
        alert("Today is Friday.");
        break;
    case 6:
        alert("Today is Saturday.");
        break;   
    default:
        alert("No information available for that day.");
        break;
}

getDay() 方法將工作日作為 0 和 6 之間的數字返回,其中 0 表示星期日。有關日期方法的詳細資訊,請參閱 JavaScript 日期和時間章節。

注意:switch...case 語句中,使用嚴格相等操作符(===) 將表示式或變數的值與 case 值進行比較。這意味著,如果 x = "0" 它不匹配 case 0: ,因為它們的資料型別不相等。

switch...case 語句不同於 if...else 語句的一個重要地方就是,switch 語句逐行執行(即逐個語句),一旦 JavaScript 找到一個 case 計算結果為 true 的子句,它不僅執行對應於該 case 子句的程式碼,而且還執行所有後續 case 子句,直到 switch 塊結束為止。

為了防止這種情況,你必須在每個 case 之後包含一個 break 語句(如上例所示)。該 break 語句告訴 JavaScript 直譯器在執行與第一個 true case 相關聯的程式碼後,跳出 switch...case 語句塊。

然而,break 並不是在 casedefault 中強制要求的在 switch 語句中的最後出現。雖然,使用 break 語句來中斷最後的 casedefault 子句是一種很好的程式設計習慣。它可以防止以後如果在 switch 語句後新增了另一個 case 語句,出現程式設計錯誤。

default 子句是可選的,它指定在 switch 表示式沒有 case 匹配時要執行的操作。該 default 子句不必是出現在 switch 語句中的最後一個子句。這是一個例子,其中 default 不是最後一個子句。

var d = new Date();

switch(d.getDay()) {
    default: 
        alert("Looking forward to the weekend.");
        break;
    case 6:
        alert("Today is Saturday.");
        break; 
    case 0:
        alert("Today is Sunday.");
}

共享相同動作的多個 case

每個 case 值在 switch 語句中必須是唯一的。但是,不同的情況不需要具有獨特的操作。有幾種情況可以共享相同的操作,如下所示:

var d = new Date();

switch(d.getDay()) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        alert("It is a weekday.");
        break; 
    case 0:
    case 6:
        alert("It is a weekend day.");
        break;
    default: 
        alert("Enjoy every day of your life.");
}