JS筆記 — 運算

Leon Kuo
4 min readJun 9, 2020

--

紀錄加減乘除特別的地方

敘述句(Statement)

  • 執行某動作
  • 變數宣告、賦值、迴圈、if判斷等皆是

運算式(Expression)

  • 產生一個值
  • function的參數
  • "="的右側部分

數字運算

Infinity

Infinity + Infinity -> Infinity
-Infinity + -Infinity -> -Infinity
Infinity + -Infinity -> NaN

NaN

只要有一個是NaN,結果就是NaN

10 + NaN -> NaN
Infinity + NaN -> NaN

自動轉型型態

— 相加 —

在「相加」的情況下,只要有一方是字串,全部都會變成字串連接

100 + "100" -> "100100"
"100" + "100" -> "100100"
100 + "ABC" -> "100ABC"

數字和 undefined 相加時,undefined 會被轉成 NaN

123 + undefined -> NaN
"abc" + undefined -> "abcundefined"

數字和 null 相加時,null 會轉成 0

123 + null -> 123
"123" + null -> "123null"

— 相減 —

若有一方並非數字,則會透過Number()的方式使其轉為數字

100 - "50" -> 50
100 - "abc" -> NaN
100 - true -> 99
100 - undefined -> NaN
100 - null -> 100
100 - {} -> NaN

— 相乘與相除—

跟減法類似,乘法的部分:

100 * "10" -> 1000
100 * "abc" -> NaN
100 * {} -> NaN
Infinity * 0 -> NaN

除法的部分:

正數 / 0 -> Infinity
負數 / 0 -> -Infinity
0 / 0 -> NaN

— 餘數 —

  • 被除數是正負Infinity的情況下,結果都會是NaN
  • 除數是Infinity的情況下,結果是被除數

正負數運算

當正/負號後面並不是帶一個數字型態的值,則會使用Number()轉換為數字型態。

var a = "+10";
var c = "Hello";
console.log(+a); //10
console.log(-a); //-10
console.log(+c); //NaN

自動轉型原則

  • 其中一個值為 Boolean: true 和 false 轉為 1 和 0
  • 字串和數字比較:字串使用 Number() 轉型為數字
  • 其中一值為「物件型別」:物件使用 ValueOf() 轉型為基本型別
  • NaN 不等於 NaN ,兩三個等號都一樣
  • 兩個物件比較:要視這兩個物件是否為同一實體

Falsy 和 Trusy

ToBoolean 會變成 false 的狀況:

  • Undefined
  • Null
  • +0, -0 , NaN
  • 空字串" ", ‘ ’
var a = 123;
var b = "abc";
var c = null;
console.log(a && b); //"abc"
console.log(a || b); //123
console.log(c && a); //null
console.log(c || b); //"abc"
console.log(c || a); //123

Reference

--

--

Leon Kuo

被股市耽誤的資訊人,平常喜愛鑽研股票書籍與研讀產業資訊,找尋屬於自己的投資模式。