Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

[Javascript]switch的條件式運算

內容目錄

switch的條件式運算

Javascript中的if和switch想必在JS中都滿常使用,有時候有較多判斷時會使用switch,通常用法如下

function checkFruit(fruit){
  switch(fruit){
    case 'Apple':
      return 'Apple'
    case 'Banana':
      return 'Banana'
    case 'Orange':
      return 'Orange'
    default: 
      return 'It is a fruit'
  }
}

原本我以為fruit作為變數的概念傳進switch,再透過不同case判斷值達到判斷效果。直到寫到了條件式才發現這個想法是錯的!沒錯,以下這種寫法就會失效。

function checkYear(year){
  switch(year){
    case (year > 2000):
      console.log('young')
      break
    case (year <= 2000 && year >= 1980):
      console.log('old')
      break
    case (year < 1980 && year >= 1950):
      console.log('too old')
      break
    default:
      console.log("year:" + year)
      break
  }
}
checkYear(2010) // year:2010

居然不是預想的顯示young,仔細查了一下才發現使用switch時的理解錯了。其實在這個例子中switch 進行條件判斷的過程長這樣:

year === (year > 2000) //expression === (value > 2000) 

當然不會有作用,換成敘述來講,swtich長這樣:

switch (expression) {
    case value: statement
        break;
    case value: statement
        break;
    case value: statement
        break;
    default: statement
}

雖然都是宣告year但一個是expression一個是真正傳進去的value,意義上不同。如果要想要用switch進行條件式運算,就要將if~else的true反過來寫,如下:

function checkYear(true){
  switch(year){
    case (year > 2000):
      console.log('young')
      break
    case (year <= 2000 && year >= 1980):
      console.log('old')
      break
    case (year < 1980 && year >= 1950):
      console.log('too old')
      break
    default:
      console.log("year:" + year)
      break
  }
}
checkYear(2010) // young

這樣就會是以下判斷,就能順利當if~else來用囉

true === (year > 2000)

結論

起初是看到了一些文章在講用不同方式處理降低使用if-else的依賴來達到判斷目的,但老實說就算使用switch,程式碼也不會減少太多,所以要不要用就見仁見智囉XD