Weird part
operator
+
兩側的其中一方是 string
Primitive: .toString()
Object: String
100 + "100" // "100100"
100 + {}// "100[object Object]"
num +
uundefined/null/
會嘗試轉成數字
123 + undefined // NaN
123 + null // 123
num +
NaN
結果都是 NaN
num + obj
obj 先透過 valueOf 方法運算出一個 number 型別的結果,然後才進行數值運算
-
兩側有不是 num
Primitive: Number()
Object: valueOf()
100 - "50" // 50
100 - "abc" // NaN
100 - undefined // NaN
100 - null // 100
*
兩側有不是 num
背後以 Nubmer()
作轉換後再進行計算
100 * "10" // 1000
100 * abc // NaN
100 * true // 100
100 * false // 0
100 * {} // NaN
String({})//'[object Object]'
String([]) // ''
String(undefined) // 'undefined'
String(null) // 'null'
String(NaN) // 'NaN'
String(() => {}) // '() => {}'
+null //0
+undefined //NaN
+{} //NaN
+[] // 0
比較運算
obj 比較 primitive == , != , < , <= , > , >=
先執行 valueOf() 或 toString() 函式,取回該物件相對應原始型別的值
obj 比較 obj
false
str 比較 num
Number() 後再比較
有 Boolean
true -> 1 false -> 0
NaN 不等於 NaN
Special Role
null 做 == 運算時不是 false 也不是 true
照理說 null 運算都會變成 0 但不行
null == 0 // false null == false // false
Last updated
Was this helpful?