if/else statement
當我有兩個以上的條件時
錯誤做法
var score = 68
if(70 >= score >= 60){
console.log('good')
}
小括號內的條件會由左做到右,因此執行順序是:
- 先執行
70 >= score
,結果會是 true - 所以小括號內就會變成
if(true >= 60)
,結果會是 false - 因此就不會執行大括號裡面的程式碼了
正確做法:用 &&
連接多個條件
var score = 68
if(score >= 60 && score <= 70){
console.log('good')
}
// output: good
當我只有用一個等號:=
假設我不小心打錯,在 if 小括號裡面只有打了一個等號
var score = 68
if(score = 68){
console.log('good')
}
if 判斷式那部分會是這樣執行的:
score = 68
if (score) {
console.log('good')
}
因為 score
會是 true,所以就也會執行大括號裡面的程式碼
加上 else
範例一:
var score = 68
if (score >= 60) {
console.log('good')
} else {
console.log('fail')
}
範例二:
判斷 number
是不是 5 的倍數
var number = 10
if (!(number % 5)) {
console.log('是 5 的倍數')
} else {
console.log('不是')
}
if/else if statement
當我有多個條件時,就可以使用 if/else if statement
if else 小知識
較冗長的做法
直覺會這樣子寫:
var score = 60
var isPass = false
if(score >= 60){
isPass = true
} else {
isPass = false
}
更快、更簡潔的做法
var score = 60
var isPass = score >= 60
var isPass = score >= 60
這句會先執行 score >= 60
- 如果
score >= 60
是 true,那isPass
就是 true - 如果
score >= 60
是 false,那isPass
就是 false
switch case
當我有三、四個條件以上時,使用 switch case 會較簡潔
注意!要記得加上 break;
,否則就會全部都執行一次
var month = 4
switch(month){
case 1:
console.log('一月')
break;
case 2:
console.log('二月')
break;
case 3:
console.log('三月')
break;
case 4:
console.log('四月')
break;
default:
console.log('hello')
}
// output: 四月
兩個 case 連在一起用
可以把兩個 case 合在一起
例如:
var month = 2
switch(month){
case 1:
case 2:
console.log('一月到二月')
break;
case 3:
console.log('三月')
break;
default:
console.log('hello')
}
// output: 一月到二月
用陣列來寫(mapping 的做法)
var month = 3
var month_to_chinese = ['一月', '二月', '三月']
console.log(month_to_chinese[month - 1])
// output: 三月
三元運算子(Ternary)
用 if else 來寫會比較冗長
var score = 60
var message = ''
if(score >= 60){
message = 'pass'
} else {
message = 'fail'
}
console.log(message)
使用三元運算子更簡潔
當「只有兩個條件」時,就建議使用三元運算子,讓程式碼更簡潔
語法:
condition ? A : B
condition
是「條件」?
代表「我要問問題」- 如果
condition
是 true,就回傳 A - 如果
condition
是 false,就回傳 B
例如:
console.log(20 > 7 ? 'bigger' : 'smaller')
// output: bigger
因此,上方的例子就可以改成:
var score = 60
var message = score >= 60 ? 'pass' : 'fail'
console.log(message)
// output: pass
巢狀的三元運算子(不建議這樣用,因為可讀性很差)
在「三元運算子」裡面,再用一次「三元運算子」,但是因為這樣很難讓人閱讀程式碼,因此寫成 if else 比較好
var score = 100
var message = score >= 60 ? (score === 100 ? 'no1' : 'pass') : 'fail'
console.log(message)
// output: no1
執行順序會是:
- 先判斷
score >= 60
- 是的話,就執行
(score === 100 ? 'no1' : 'pass')
- 再判斷
score === 100
,是的話回傳no1
,不是的話回傳pass