JS 逻辑运算子及函式预设值 DAY56

逻辑运算子
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


<<:  鼠年全马铁人挑战 WEEK 38:封包测试工具 - Charles (三)

>>:  [C#] LeetCode 4. Median of Two Sorted Arrays 浅谈中位数

Spring Framework X Kotlin Day 2 3 Tier & Simple CRUD

GitHub Repo https://github.com/b2etw/Spring-Kotlin...

Flutter学习Day1 dart&flutter安装(windows)

小弟弟第一次发文, 如有不好的地方 请多包涵 (≧∀≦)ゞ 由於我是vs code 使用爱好者 所以...

Day22 - ArgoCD 建立应用程序

前言 前一天我们在 K8s Cluster 建置好了 ArgoCD 服务,今天就来实际操作看看,透过...

Progressive Web App Web Push: 网站推播通知服务器实作入门 (23)

什麽是网站推播通知 推播通知不管对 App 或是网站来说都是一种重新吸引用户来使用 App 的方法,...

补充: 建立 Todo list 画面

发现昨天的介绍中漏掉新增 Todo 的画面是怎麽来的,补充一下。 安装 React Material...