運算符 +
Symbol + 數字
會報錯 Cannot convert a Symbol value to a number
Symbol + 字符串
會報錯 Cannot convert a Symbol value to a string
存在對象,數組,函數時
對象,數組,函數會先執行其 toString() 方法,再參與運算
其中一方是字符串(字符串拼接)
另一方會自動轉換為字符串,再進行字符串拼接
''+1 // '1'
'1'+ 1 // '11'
'1'+ true //'1true'
'1'+ null //'1null'
'1'+ undefined //'1undefined'
let d={}
d+'1' // '[object Object]1'let e = {'name':'朝陽','toString':()=>{return 1}};
e+'1' // '11'
[1,2]+'1' // '1,21'
兩方都不是字符串(加法求和)
能轉換為數字的數據會自動轉換為數字,再進行加法運算
- true 轉為數字是 1
- false、null 轉為數字是 0
- undefined 轉為數字是 NaN
1 + true // 2
1 + false // 1
1 + null // 1
1 + undefined // NaN
true + true //2
null + false // 0
let e = {'name':'朝陽','toString':()=>{return 1}};
e+1 // 2
運算符 ==
(因轉換規則太復雜,不用記,且不推薦使用)
以 x==y 為例
-
如果x的數據類型和y的數據類型相同,則返回以嚴格運算符執行判斷的結果,即x===y的結果
-
如果x是null,y是undefined,返回true
-
如果x是undefined,y是null,返回true
-
如果x的數據類型是Number,y的數據類型是String,則將y轉成Number,然后返回x==toNumber(y)的結果
-
如果x的數據類型是String,y的數據類型是Number,則將x轉成Number,然后返回toNumber(x)==y的結果
-
如果x的數據類型是Boolean,則將x轉成Number,然后返回toNumber(x)==y的結果
-
如果y的數據類型是Boolean,則將y轉成Number,然后返回x==toNumber(y)的結果
-
如果x的數據類型是String、Number或者Symbol,y的數據類型是Object,則將y轉成原始類型,然后返回x==toPrimitive(y)的結果
-
如果x的數據類型是Object,y的數據類型是String、Number或者Symbol,則將x轉成原始類型,然后返回toPrimitive(x)==y的結果
-
返回false