邏輯運算子 及 函式預設值


Posted by hoyi-23 on 2021-05-19

文章參考 - 運算子與運算元

什麼是 邏輯運算子?

邏輯運算值通常和布林值一起使用,並返回布林值。
不過,&& 和 || 運算子實際上返回的是指定運算元的其中一個值。

  1. && and
  2. || or
  3. ! not

&& And

若第一個是假值,不管第二個運算元是不是真值,會回傳第一個假值。

console.log(undefined && 1); //undefined
console.log(0 && 1); //0

若第一個是真值,不管第二個運算元是真值或假值,都會回傳第二個值。

console.log(-1 && 0); // 0
// 0 是假值
console.log(-1 && 1); // 1
console.log(-5 && 5); // 5

&& 就是看第一個值,若不是真值就立即回傳;若是,就回傳第二個。

|| or

若第一個是真值,會直接回傳。

console.log(-1 || 1); // -1

若第一個不是真值,會回傳第二個。

console.log(0 || 1); // 1
console.log(0 || 0); // 0
console.log(0 || NaN); // NaN

若第一個是真值,立即回傳;否則,回傳第二個。

&& 與 || 共同點

他們都是主要驗證第一個值。

!

console.log(!0); // true
console.log(!1); // false
console.log(![]); // false
console.log(!NaN); // true

延伸用法

var saving = 500;
function takePayment(cash){
    var money = cash + saving;
    console.log('我現在有' + money + '元');
}
takePayment(100); //我現在有600元

若今天cash為空值時:

var saving = 500;
function takePayment(cash){
    var money = cash + saving;
    console.log('我現在有' + money + '元');
}
takePayment(); //我現在有NaN元

因為cash現在變為NaN(not a number),所以無法帶入運算。

var saving = 500;
function takePayment(cash){
    cash = cash || 0; //若cash是真值就立即回傳,若不是真值,回傳第二個值給cash
    var money = cash + saving;
    console.log('我現在有' + money + '元');
}
takePayment(); //我現在有500元

那位什麼不能直接傳0進去呢?

takePayment(0); 
//因為 0 會被視為假值

該如何把0傳入呢?
使用三元預算子

var saving = 500;
function takePayment(cash) {
  cash = parseInt(cash); //將輸入的字串變為數值,從假值變為數值
  cash = (cash || cash === 0)? cash: 0; 
  //若 cash 是數值或為 0 時,使用 cash 的數值;否則直接套用 0。
  var money = cash + takePayment;
  console.log('我有 ' + money + ' 元');
}
takePayment(0);

#邏輯運算子 #函式預設值







Related Posts

關於 React 小書:PropTypes 和 Component 參數驗證

關於 React 小書:PropTypes 和 Component 參數驗證

197. Rising Temperature

197. Rising Temperature

180. Consecutive Numbers

180. Consecutive Numbers


Comments