紀錄加減乘除特別的地方
敘述句(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