前言
判斷是邏輯的起源,
寫得好、寫得巧、寫得呱呱叫,
這裡會把一些我覺得跟『判斷』有關且常用的東西放進來。
判斷
故名意思,判斷就是要得到一個『是』或『不是』結果,而在JavaScript裡,我們期待得到的是『ture』或『false』或其他經由邏輯得到的結果。
1 | var a = 1; |
這就是一個簡單的判斷
比較運算子 Comparison operators
1 | var a = 1; |
Tip: “!” 驚嘆在運算子中為相反的意思。 ex: !false === true
這就是全部的比較運算子,基本上都是國小,使用上應該都很直覺。
比較值得留意的是嚴謹模式下的“===”與“!==”
嚴謹模式
在嚴謹模式開發現,可避免一些不必要的錯誤,在這裡我們只說明比較運算子的存在的兩個嚴謹模式,“===”與“!==”。
Tip: 比較運算子沒有這種東西 “>>” “<<”
1 |
|
在嚴謹模式下的比較運算子,會連『型別』也進行比較。
邏輯運算子 Logical operators
&&
1 | var a1 = true && true; // t && t returns true |
||
1 | var o1 = true || true; // returns true |
“||” 可以看成『或著』的意思,由前面開始,只要是 null、 0、 NaN、 空字串 (“”)、undefined可以轉換為false的運算式,就會下面一位,直到符合或是最後一個。
1 | var o8 = null || undefind || false || 'Hi'; // returns 'Hi' |
??
1 | var b1 = 1 ?? true; // returns 1 |
Nullish coalescing operator (??
)是我比較後來才知道的,有時候使用”??”會比”||”好,因為他的0或空字串””不會被判定略過,某些狀況下還是比較適合的。
switch
1 | function getMeal(time) { |
未達條件會繼續往下走,直到default。
if…else
1 | function getMeal(time) { |
未達條件會繼續往下走,符合條件其中之一作件,會停止整個if…else判斷。
1 | if (time == 7) { //if作為整個 if...else的開頭 |
有時判斷思路可以改變下,以 getMeal 的函式來說,可以寫成更簡潔的
1 | function getMeal(time) { |
Tip: 如果判斷是只有簡單的對或錯可以使用”三元表達式”
1 |
|
三元表達式 => “ 判斷 ? 結果一 : 結果二 “
可以想像成,如果判斷是對的話,走結果一,其他走結果二。
Optional chaining (?.)
1 | const adventurer = { |
如我物件找不到的話會直接終止,給予undefined,並不會繼續往下找,省得一些不必要的過程。
但在一些程式中需要防呆機制,以保證就算找不到想要的值,程式還是可以正常地跑下去。
1 | const dogName = adventurer.dog?.name ?? 'No name' |
為什麼不用「||」
1 | const adventurer = { |
完全是看自己需求,看前面提到的,如果你需要如果找到的值,
只要是 null、 0、 NaN、 空字串 (“”)、undefined可以轉換為false的運算式,就往下的話,就可以用||。
Tip: 在??中,0 或是 “”,都會被保留。
小結
我只寫些常用且比較直覺關於判斷的東西,歡迎批評指教。