JavaScript 的判斷式


Posted by saffran on 2021-02-05

if/else statement

當我有兩個以上的條件時

錯誤做法

var score = 68
if(70 >= score >= 60){
  console.log('good')
}

小括號內的條件會由左做到右,因此執行順序是:

  1. 先執行 70 >= score,結果會是 true
  2. 所以小括號內就會變成 if(true >= 60),結果會是 false
  3. 因此就不會執行大括號裡面的程式碼了

正確做法:用 && 連接多個條件

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

執行順序會是:

  1. 先判斷 score >= 60
  2. 是的話,就執行 (score === 100 ? 'no1' : 'pass')
  • 再判斷 score === 100,是的話回傳 no1,不是的話回傳 pass

#javascript







Related Posts

JS101 隨筆

JS101 隨筆

Leetcode 刷題 pattern - 美國軟體工程師求職有趣經驗

Leetcode 刷題 pattern - 美國軟體工程師求職有趣經驗

React Redux 整合實務 - Switch

React Redux 整合實務 - Switch


Comments