1. 程式人生 > >switch分支語句合併相同功能的case語句

switch分支語句合併相同功能的case語句

Write By Monkeyfly

以下內容均為原創,如需轉載請註明出處。

前提

描述:

switch 語句用於:根據一個變數的不同取值,來執行不同的程式碼。

語法:

switch(n)
{
  case 1:
 	執行程式碼塊 1
 	break;
  case 2:
  	執行程式碼塊 2
 	break;
  default:
 	如果以上條件都不滿足,則執行該程式碼;
}

如果多個 case 語句都執行相同的功能程式碼時,應該怎麼處理呢?【可以做如下理解】

  • 如何給 case 語句傳多個值?
  • switch 分支結構中一個 case 語句可以跟多個值嗎?
  • switch 語句中 相同的 case
    能合併麼?

實現

我的寫法如下:【錯誤寫法】

switch(month){
    case 1 || 3 || 5 || 7 || 8|| 10 ||12:
        console.log(month+"月有31天");
        break;
    case 4 || 6 ||9 ||11:
        console.log(month+"月有30天");
        break;
    default:
        console.log(month+"月有28天");
}

於是我就習慣性的使用了 JavaScript 中的邏輯運算子 || (或) 來實現的。

注:邏輯運算子用於測定變數或值之間的邏輯。

發現問題

剛開始寫的時候沒注意這個寫法有沒有問題,因為自己也是第一次這麼寫。

今天在測試功能時,經過除錯才發現了該問題:當變數的值符合 這個 case 語句中的表示式判斷時,它並沒有執行該 case 語句,而是直接執行了 default 語句。

當錯誤發生的時候,我才意識到:有可能是當初 case 語句 的表示式判斷寫的有問題。如果多個變數的取值都對應同一種處理情況時,我選擇了使用 邏輯運算子 || (或)來實現。寫的時候也不知道對錯,憑印象寫的。

解決問題

  • 經過百度搜索一番才發現,並不是這麼幹的。原來是語法寫錯了,根本就沒有我那樣的寫法。
  • 從搜尋結果來看,有不少小夥伴都有過我這種類似的寫法,看來這個現象還是會經常發生的,一不留神就寫錯了。
  • 究其根本,還是對基礎語法掌握的不熟練,否則怎麼可能犯這種低階的錯誤呢?

正確的書寫語法如下:

switch(month){
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		console.log(month+"月有31天");
		break;
	case 4:
	case 6:
	case 9:
	case 11:
		console.log(month+"月有30天");
		break;
	default:
		console.log(month+"月有28天");
}

看到這,我才恍然大悟, 合併多個相同功能的 case 語句 原來是這麼寫的。

//這才是正確的寫法
case 1:
case 3:
case 5 :
case 7:
	//code...
	break;

結束語

至此,問題就已經被解決了。

switch 結構說明:

  • switch、case、break、default 都是系統關鍵字,都必須全小寫。
  • switch後的小括號( ):小括號內一般是一個變數名,這個變數可能會有不同的取值。
  • 每個 case 的值都會與變數的值進行對比,看是否相等,如果一致就執行該 case 語句對應的程式碼。
  • 所有的 case 都是 “或”(or) 的關係,每時每刻只有一個 case 會滿足條件。
  • 每個 case 中的程式碼執行完畢後,必須要用 break 語句來阻止程式碼自動地向下一個 case執行。
  • 如果不寫 break 語句的話,下面所有的 case 語句都會執行一遍。
  • 請使用 default 關鍵詞來規定匹配不存在時做的事情。可省略不寫。

switch 工作原理:

  • 首先設定表示式 n(通常是一個變數)。
  • 隨後表示式的值會與結構中的每個 case 的值做比較。如果存在匹配,則與該 case 關聯的程式碼塊會被執行。
  • 請使用 break 來阻止程式碼自動地向下一個 case 執行。
  • 請使用 default 關鍵詞來規定匹配不存在時做的事情。即匹配失敗時預設要執行的程式碼。