Switch是與if ... else ...相同的條件語句,不同之處在于switch語句允許根據(jù)值列表測試變量是否相等。
使用switch從要執(zhí)行的許多代碼塊中選擇一個。這是一個完美的解決方案,嵌套if…else語句。
一條switch語句如下所示:
switch (expression) { case value1: //語句執(zhí)行 //表達式的結(jié)果與value1匹配 break; case value2: //語句執(zhí)行 //表達式的結(jié)果與value2匹配 break; ... case valueN: //語句執(zhí)行 //表達式的結(jié)果與value N匹配 break; default: //當(dāng)以上任何一項都不執(zhí)行時 //執(zhí)行這里的代碼塊 }
按照上面代碼塊的邏輯,這是將要發(fā)生的事件的順序:
switch表達式一次求值
將表達式的值與每種情況的值進行比較
如果匹配,則執(zhí)行相關(guān)的代碼塊
如果所有情況都不匹配,則執(zhí)行默認代碼塊
以下示例使用工作日編號來計算星期幾:
var day; switch (new Date().getDay()) { case 0: day = "Sunday"; break; case 1: day = "Monday"; break; case 2: day = "Tuesday"; break; case 3: day = "Wednesday"; break; case 4: day = "Thursday"; break; case 5: day = "Friday"; break; case 6: day = "Saturday"; break; default: day = "Undefined Day"; }測試看看?/?
break與每個case標(biāo)簽相關(guān)聯(lián)的關(guān)鍵字可確保一旦執(zhí)行了匹配的語句,程序便會退出切換,并在切換后的語句處繼續(xù)執(zhí)行。如果省略break,程序?qū)⒃趕witch語句的下一個語句處繼續(xù)執(zhí)行。
如果您忘記休息,那么腳本將從符合條件的情況開始運行,然后在滿足條件的情況下運行情況:
var num = Number(document.querySelector("input").value); var text; switch (num) { case 1: text = "您輸入的號碼是 1"; case 2: text = "您輸入的號碼是 2"; case 3: text = "您輸入的號碼是 3"; case 4: text = "您輸入的號碼是 4"; case 5: text = "您輸入的號碼是 5"; default: text = "執(zhí)行默認語句"; }測試看看?/?
沒有必要中斷switch塊中的最后一種(即default)情況。因為語句塊最終在這里中斷(結(jié)束)。
如果沒有case匹配,則default關(guān)鍵字指定要運行的一些代碼。
switch中只能有一個默認語句。盡管這是可選的,但建議您使用它,因為它可以處理預(yù)料之外的情況。
有時,您會希望不同的情況使用相同的代碼,或者使用通用代碼。
這是一個操作順序switch語句的一個示例,其中四個不同的值執(zhí)行完全相同的操作:
var num = Number(document.querySelector("input").value); var text; switch (num) { case 1: case 2: case 3: case 4: text = "你輸入的數(shù)字介于兩者之間 1 - 4"; break; case 5: case 6: case 7: case 8: text = "你輸入的數(shù)字介于兩者之間 5 - 8"; break; default: text = "執(zhí)行默認語句"; }測試看看?/?
如果多個case與值匹配,則選擇第一個case。
如果找不到匹配的case,程序?qū)⒗^續(xù)使用默認標(biāo)簽。
如果未找到默認標(biāo)簽,則程序?qū)⒗^續(xù)執(zhí)行切換后的語句。