Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
在解決問題之道上不斷前行
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