JavaScript語言中的條件語句,除了if 語句,還有switch 語句。switch 常用於根據不同的條件執行不同的操作。雖然它和 if 語句都是用來判斷條件的語句,但是它們之間還是有不同。
switch的語法
語法如下所示:
switch(expression) { case 變量x: // 語句1代碼塊 case 變量y: // 語句2代碼塊 case 變量z: // 語句3代碼塊 break; default: // 代碼塊 }
語法解釋:表達式值計算一次,然后我們依次將表達式的值與每一種 case 情況的值進行比較,如果匹配,就會執行與 case 對應的相關代碼塊。
執行原理:變量 expression 的值與 case 的值進行比較,比如變量 expression 等於 case 變量 x,我們就執行語句1的代碼塊,如果變量 expression 等於 case 變量 y 就執行語句2的代碼塊,依次類推,如果都不符合就執行 default 語句代碼塊。break 語言用於結束當前執行的語句,default 表示默認的,在沒有符合選項的時候默認選擇。
示例:
使用 switch 語句來看判斷今天是星期幾,並輸出對應時間。例如在一個 html 文件中,寫入下列代碼:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>js_俠課島(9xkd.com)</title> </head> <body> <div> <p id="date"></p> </div> <script> var day; var d = new Date().getDay(); switch(d) { case 0: day = "星期天"; break; case 1: day = "星期一"; break; case 2: day = "星期二"; break; case 3: day = "星期三"; break; case 4: day = "星期四"; break; case 5: day = "星期五"; break; case 6: day = "星期六"; break; case 7: day = "星期天"; break; } document.getElementById("date").innerHTML = day; </script> </body> </html>
在瀏覽器中打開這個HTML文件,頁面會顯示:
星期二
我們來分析一下 <script> 標簽中的 JavaScript 代碼,變量 d 是我們獲取到的當天的星期天數(我寫這個文章的時候是星期二),getDay() 方法會返回與星期相對應的數字,例如星期一返回1、星期二返回2,以此類推。
然后我們將這個變量 d 作為switch 語句的表達式值,將它與 case 后面的值匹配,如果表達式等於某個 case 后面的值,則執行響應的代碼。例如上述代碼中,變量 d 的值為2,那么就會匹配到 case 2,所對應的代碼就是day = "星期二";,所以輸出結果為星期二。后面還有一個break 語句,這個語句的作用就是跳出 switch 語句,避免同時執行多個case。
default 關鍵詞
default 關鍵詞規定 case 匹配不存在時所做的事情。
示例:
例如我們看下面這段代碼:
var level = "P"; switch(level){ case "A": console.log("第一類"); break; case "B": console.log("第二類"); break; case "C": console.log("第三類"); break; case "D": console.log("第四類"); break; default: console.log("其他"); }
輸出:
其他
上述代碼中,如果 level 的值不滿足任何 case 的值,則會匹配到 default。代碼中 level 的值為 P,而 case 語句中的值只有A、B、C、D,此時就會匹配到 default 語句,執行 default 語句下面的代碼。
break 關鍵詞用於跳出 switch 代碼塊。使用 break 能夠節省大量執行時間,因為它會忽略 switch 代碼塊中的其他代碼的執行。
switch 與 if 的對比
關於條件分支 switch 和 if 兩者之間的區別和關聯,我們可以通過下面這個表格進行簡單直觀的認識:
switch | if | |
---|---|---|
判斷條件 | 等值判斷 | 等值判斷和區間判斷 |
結束語句 | break跳出 | 執行一個if后自動結束 |
默認和否則語句 | default可以放在任何位置 | else只能放在最后 |
- if 語句表達式的結果是 boolean 布爾類型,常用於區間判斷。
- switch 表達式類型不能是 boolean 布爾類型,可能是 byte、int、char、string、枚舉,常用於等值判斷。
注意一般能用 switch 語句實現的就一定能使用 if 語句來實現,但是反過來卻是不一定的,如果區間范圍就采用 if,如果等值判斷就使用 switch。
效率問題:
- switch case 會生成一個跳轉表來指示實際的 case 分支地址。
- switch case 只能處理 case 為常量的情況。
- if else 需要遍歷條件分支知道命中條件。
- if else 能應用於更多的場所,比較靈活,但是必須遍歷所有可能的值。