1212
FrontEnd/JavaScript/core/190920-2.md at master · JessieRabbit/FrontEnd · GitHub
Skip to content

Latest commit

 

History

History
128 lines (112 loc) · 3.11 KB

File metadata and controls

128 lines (112 loc) · 3.11 KB

運算子、型別與文法(2)

truthy 真值 與 falsy 假值

注意!!! 不要跟隱含轉型搞混!!!!

https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy

js compare table

https://dorey.github.io/JavaScript-Equality-Table/
if tab 就是在比對真值和假值

這邊還是要注意在使用原始型別避免用包裹物件!!!!!!!!!

邏輯運算子及函式預設值

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) 
|| (or)
!  (not)

記住!!一律都看第一個判斷真值和假值!!!!!!

&& (and)

若第一個不是真值,就回傳第一個
若第一個是真值,就回傳第二個
ex: 0 && 1 // 0
1 && 2 // 1

|| (or)

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

! (not)

顛倒否定的概念
!0 // true
!1 // false

預設值為0的解決方法

使用三元運算子

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);

總結(測驗考題)

// ex 1
/*var a = 1; // number
var b = new Number(1); // 建構式,object {1}
console.log(a == b); // 非物件比對物件 number == object
//  1 == {1} Number({1}) 轉成 1 所以答案是true
console.log(a === b); // false
*/

// ex2
/*var a = 1;
var b = 0;
console.log(1 || 0); // 因為||第一個是真值,回傳第一個 所以答案是1
*/

// ex3
/*var a = 1;
var b = 2;
var c = 0;
console.log(a && b && c); // 0
// &&的順序為由左到右,然後不是整個比對,因為是表達式,所以成雙成對
// 1 && 2 // 2
// 2 && 0 // 0
console.log(c || c && c || a); // 1
// 要先看|| && 優先序,&&優先度高於||
// c && c // 0
// c || 0 || a
// 0 || 0  // 0
// 0 || 1 // 1

console.log(a && b || c && a); // 2
// 1 && 2 // 2     0 && 1 // 0
// 2 || 0 // 2 
*/

// ex4
/*var a = 1 + 1 === 1;
console.log(a); // false
//  a = 2 === 1 優先序=最低
//  2 === 1 false
*/

// ex5
/*console.log(1000 < 10000 < 10); // true
//  1000 < 10000 // true 
//  true < 10 true轉型Number(true) // 1
//  1 < 10 true
*/

// ex6
var a = '1';
var b = 2;
var c = (a > b) ? a * b : sum(a, b);

function sum(a, b) {
    return a + b;
}
console.log(c); // 12
// '1' > 2  字串會轉型Number('1') // 1
// sum => '1' + 2  轉型變成string 12

補充: NaN 雖然在 JavaScript 代表無效的數字,但是還是歸類於數字唷~另外 null 在課程上有講述到,這是很長久的 bug,所以才會顯示 object。

補充: 因為 ++a 的時候,a + 1 變成 11 所以就是 11 * 11,--a 同理。

口訣: 
++ a 先加在賦於結果
a ++ 先把a賦於結果,後面在加1

https://stackoverflow.com/questions/6378646/whats-the-difference-between-i-and-i-in-javascript