文章參考 - 運算子與運算元
什麼是 邏輯運算子?
邏輯運算值通常和布林值一起使用,並返回布林值。
不過,&& 和 || 運算子實際上返回的是指定運算元的其中一個值。
- && and
- || or
- ! 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);