iT邦幫忙

0

JS 邏輯運算子及函式預設值 DAY56

  • 分享至 

  • xImage
  •  

邏輯運算子
MDN : https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/%E9%81%8B%E7%AE%97%E5%AD%90/%E9%82%8F%E8%BC%AF%E9%81%8B%E7%AE%97%E5%AD%90

&& (AND)
若第一個表達式為 false ,直接回傳第一個
若第一個表達式不為 false ,回傳第二個

|| (OR)
若第一個表達式為 true , 則回傳第一個
否則回傳第二個

! (NOT)
!真值 --> 假值
!假值 --> 真值

// && (AND)
// 第一個假值 回傳第一個
console.log( 0 && 1);
// 第一個真值 回傳第二個
console.log( 1 && 0);

// || (OR)
// 第一個假值 回傳第二個
console.log( 0 || 1);
// 第一個真值 回傳第一個
console.log( 1 || 0);

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

ex:

var originCash = 500;
function updateMoney(cash){
    // 若 updateMoney 沒有傳參數進來 cash 為undefined (假值)
    // 所以  當第一個表達式為 falsy , 執行第二個表達式 
    cash = cash || 300;
    var money = cash + originCash;
    console.log(money);

}
updateMoney();

這時候
我們想傳 0 進去 , 但會被判斷假值,而執行 300
那要怎麼解決呢??
可用三元運算子

var originCash = 500;
function updateEasyCard(cash) {
  cash = parseInt(cash);
  console.log(cash);
  // 當 cash 是數值或為 0 時,使用 cash 的數值
  // 如果 cash 是 NaN 時,則直接套用 500
  cash = (cash || cash === 0)? cash: 500;
  var money = cash + originCash;
  console.log('我有 ' + money + ' 元');
}
updateEasyCard(0);

這裡總結前幾篇的介紹

var a = 1;
var b = 2;
var c = 0;
// && 2元運算子 由左至右
// 所以執行順序是
// a && b  1 && 2 回傳 2
// 2 && c  2 && 0 回傳 0 
console.log(a && b && c); // 0

var a = 1;
var b = 2;
var c = 0;
// && 優先性 比 || 高
// c || 0 || a
// 0 || a 
// 1
console.log( c || c && c || a); //1
var a = 1;
var b = 2;
var c = 0;
// && 優先性 比 || 高
// 2 || 0
console.log( a && b || c && a); // 2

// 加號優先性較高
// 2 === 1 
// 所以為 false
var a = 1 + 1 === 1 ;

// 1000 < 10000 true
// true < 10 
// true 轉型成數值 1
// 1 < 10
// 所以為 true
console.log( 1000 < 10000 < 10);
var a = '1';
var b = 2;
// a 轉型成數值 
// 1 < 2 false 執行 sum(a , b)
// '1' + 2 --> 12 (字串和數值相加 會轉成字串)
var c = (a > b) ? a * b : sum(a , b);
function sum(a , b){
    return a + b ;
}  
console.log(c ,typeof c); // 12 string 

那今天的介紹就到這裡
若有任何問題 或 內容有誤
可以跟我說唷/images/emoticon/emoticon41.gif


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言