邏輯運算子 及 函式預設值


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

Browser Rendering Optimization

Browser Rendering Optimization

Auto Generate Insert Script without SQL Manager

Auto Generate Insert Script without SQL Manager

There's no hierarchy of pain

There's no hierarchy of pain


Comments