Weird part

operator

operator
description
example

+ 兩側的其中一方是 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

比較運算

operator
description
example

obj 比較 primitive == , != , < , <= , > , >=

先執行 valueOf() 或 toString() 函式,取回該物件相對應原始型別的值

obj 比較 obj

false

str 比較 num

Number() 後再比較

有 Boolean

true -> 1 false -> 0

NaN 不等於 NaN

Special Role

operator
description
example

null 做 == 運算時不是 false 也不是 true

照理說 null 運算都會變成 0 但不行

null == 0 // false null == false // false

Last updated

Was this helpful?