基本類型
number,string,boolean,undefined,null,object,symbol數組
顯式轉換
轉string
number, string, boolean, undefined,null,symbol會以字符串的形式原樣貌輸出。編碼
object: 會輸出爲"[object Object]".net
轉number
使用基本包裝類型Number
Stringcode
- 數字格式:原樣貌輸出,例如 Number('123') ==> 123
- 空字符串:輸出0,例如Number('') ==> 0
- 其餘: 輸出NaN, 例如Number('s') ==> NaN
booleancdn
undefined: NaN對象
null: 0blog
object:調用object的toString方法,取其返回值進行轉換,規則同其餘類型。unicode
- 例如 Number({toString() {return ''}}) ==> 0
- 例如 Number({toString() {return 'ss'}}) ==> NaN
symbol: 會報錯。報錯內容:Cannot convert a Symbol value to a number字符串
使用parseInt
Stringget
- 數字格式:原樣貌輸出,例如 parseInt('123') ==> 123
- 數字打頭:輸出前面的數字,例如 parseInt('1s') ==> 1
- 空字符串:輸出0,例如parseInt('') ==> NaN
- 其餘字符串格式: 輸出NaN, 例如parseInt('s') ==> NaN
其餘狀況:均爲NaN
轉boolean
String:當字符串長度大於1時轉爲true,不然false,例如Boolean(' ') ==> true
number:當數字不全爲0時轉爲true,不然false,例如Boolean(0.01) ==> true, Boolean(0.0) ==> false
undefined,null: false
object: 均轉爲true,例如 Boolean({toString() {return false}})
Symbol: 均轉爲true,例如 Boolean(Symbol(false))
轉Object
number,string,boolean 轉爲其對應的基本包裝類型,例如 Object(1) ==> Number{1}。可是並不相等。
undefined,null: 轉換爲空對象。例如 Object(undefined) ==> {}
symbol: 轉換爲symbol包裝類型對象【此處解釋存疑】。例如 Object(Symbol(12)) ==>
隱式轉換
字符串鏈接+
轉換規則:會把其餘數據類型調用String()方法轉換成字符串而後拼接。
+號說明:
- 字符串鏈接符+:只要+號兩邊至少有一邊是字符串。
- 算術運算符符+:兩邊都不能是字符串。
算術運算符
算術運算符: (+、-、*、**、/、%) 轉換規則:會把其餘數據類型調用Number()轉換成數字,而後作加法運算。
關係運算符
轉換規則:
- 當關系運算符兩邊有一邊是字符串的時候,會將其餘數據類型使用Number轉換,而後比較關係。
- 當關系運算符兩邊都是字符串的時候,會同時轉成number,而後比較關係。此時是按照字符串對應的unicode編碼來轉成的數字。能夠使用charCodeAt查詢。
- 例如:'aab' < 'abb' ==> true
特殊狀況
- undefined == undefined ==> true
- undefined == null ==> true
- null == null ==> true
- NaN == NaN ==> false
複雜數據類型
複雜數據類型:對象、數組
轉換規則:先調用valueOf()方法獲取其原始值,若是是值類型,則中止繼續調用。若是不是值類型,則調用該類型的toString()方法,若是是值類型,則轉換爲字符串進行比較,若是是複雜數據類型則報錯。
- 例如:var a = { valueOf() { return 1 }, toString () { return 2
} },a == 1 ==> true
邏輯非隱式轉換
邏輯非:將其餘數據類型使用Bollean()轉換成布爾類型。
- 例如:
- [] == 0 ==> true
- [].valueOf().toString()獲得空字符串
- Number('') === 0
- ![] == 0 ==> true
- 邏輯非優先級高於關係運算符 ![] =false
- false == 0 成立
- ![] == [] ==> true
- 邏輯非優先級高於關係運算符 ![] = false
- [].valueOf().toString()獲得空字符串
- Number('') = 0
- false == 0 成立
- [] == [] ==> false
- !{} == {} ==> false
- 邏輯非優先級高於關係運算符 !{} = false
- {}.valueOf().toString()獲得'[object Object]'
- Number('[object Object]') = NaN
- false == NaN ==> false
- {} == {} ==> false
參考地址