JS的數(shù)據(jù)類型轉(zhuǎn)換
一、自動類型轉(zhuǎn)換
一般是跟運行環(huán)境和操作符聯(lián)系在一起的,是一種隱式轉(zhuǎn)換,具有一定的規(guī)律性,大體可以劃分為:轉(zhuǎn)換為字符串類型、轉(zhuǎn)換為布爾類型、轉(zhuǎn)換為數(shù)字類型。
(1)轉(zhuǎn)換為字符串類型
當(dāng)加號“+”作為二元操作符,并且其中一個操作數(shù)為字符串類型時,另一個操作數(shù)將會被無條件轉(zhuǎn)為字符串類型。
對于基礎(chǔ)類型,會直接轉(zhuǎn)換為與字面量相一致的字符串類型。
對于復(fù)合類型,會先試圖調(diào)用對象的valueOf()方法(返回對象的指定原始值),如果此方法返回值是引用類型,則接著再調(diào)用它其toString()方法(返回對象的字符串表示),最后將返回值轉(zhuǎn)為字符串類型。

(2)轉(zhuǎn)換為布爾類型
數(shù)字轉(zhuǎn)為布爾類型
當(dāng)數(shù)字在邏輯環(huán)境中執(zhí)行的時候,會自動轉(zhuǎn)為布爾類型。
0和NaN會自動轉(zhuǎn)為false,其余數(shù)字都被認(rèn)為是true(非0負(fù)值也會被認(rèn)為是true)。
字符串轉(zhuǎn)為布爾類型
和數(shù)字類似,當(dāng)字符串在邏輯環(huán)境中執(zhí)行時,也會被轉(zhuǎn)換為布爾類型。
空字符串會被轉(zhuǎn)為false,其他字符串都會轉(zhuǎn)為true。
undefined和null轉(zhuǎn)為布爾類型
當(dāng)undefined和null在邏輯環(huán)境中執(zhí)行時,都被認(rèn)為是false。
對象轉(zhuǎn)為布爾類型
當(dāng)對象在邏輯環(huán)境中執(zhí)行時,只要當(dāng)前引用的對象不為空,都會被認(rèn)為是true。如果一個對象的引用為null,會被轉(zhuǎn)換為false。雖然使用typeof檢測null為“object”,但它并不是嚴(yán)格意義上的對象類型,只是一個對象空引用的標(biāo)識。
另外,這里的邏輯環(huán)境不包括比較操作符(==),因為它會根據(jù)valueOf()和toString()將對象轉(zhuǎn)為其他類型。
由于對象總被認(rèn)為是true,使用基礎(chǔ)類型的包裝對象時,要特別小心。
對于Boolean類,有個特別需要注意的地方,當(dāng)傳入一個字符串時,它不會去解析字符串內(nèi)部的值,而是做一個簡單的判斷,只要不是空字符串,都會被認(rèn)為是true。
邏輯非、邏輯與和邏輯或操作符轉(zhuǎn)布爾類型
連用兩個邏輯非可以把一個值轉(zhuǎn)為布爾類型。
(3)轉(zhuǎn)換為數(shù)字類型
操作數(shù)在數(shù)字環(huán)境中參與運算時,會被轉(zhuǎn)為相應(yīng)的數(shù)字類型值,其轉(zhuǎn)換規(guī)則如下:
字符串類型轉(zhuǎn)為數(shù)字:空字符串被轉(zhuǎn)為0,非空字符串中,符合數(shù)字規(guī)則的會被轉(zhuǎn)換為相應(yīng)的數(shù)字,否則視為NaN。
布爾類型轉(zhuǎn)為數(shù)字:true被轉(zhuǎn)為1,false被轉(zhuǎn)為0。
null被轉(zhuǎn)為0,undefined被轉(zhuǎn)為NaN。
對象類型轉(zhuǎn)為數(shù)字:valueOf()方法先試圖被調(diào)用,如果調(diào)用返回的結(jié)果為基礎(chǔ)類型,則再將其轉(zhuǎn)為數(shù)字;如果返回的結(jié)果不是基礎(chǔ)類型,則會再試圖調(diào)用toString()方法,最后試圖將返回結(jié)果轉(zhuǎn)為數(shù)字,如果這個返回結(jié)果是基礎(chǔ)類型,則會得到一個數(shù)字或NaN,如果不是基礎(chǔ)類型,則會拋出一個異常。
一個其他類型的值被轉(zhuǎn)換為數(shù)字,跟其參與運算的操作符有很密切的聯(lián)系。
二、強(qiáng)制類型轉(zhuǎn)換
(1)String
把一個數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)為String類型有兩種方法:
方法一:toString()方法
Null和Undefined不能進(jìn)行轉(zhuǎn)換,因為它們沒有toString()方法。
方法二、調(diào)用String()函數(shù)
(2)Number
????轉(zhuǎn)換情況:
????1、數(shù)字->數(shù)字
????2、非全數(shù)字->NaN
????3、空串和滿空格->0
????4、布爾值轉(zhuǎn)換:true->1,false->0
????5、null->0
????6、Undefined->NaN
方法一、Number()函數(shù)
方法二、ParseInt();ParseFloat()
這種方式一般用于字符串,其他類型會優(yōu)先轉(zhuǎn)換為字符串類型然后再操作。
ParseInt():從字符串中取整數(shù),從左向右開始檢查,遇見非數(shù)字的后面全不取。
parseInt(string, radix) 當(dāng)參數(shù) radix 的值為 0,或沒有設(shè)置該參數(shù)時,parseInt() 會根據(jù) string 來判斷數(shù)字的基數(shù)。
舉例,如果?string?以 "0x" 開頭,parseInt() 會把?string?的其余部分解析為十六進(jìn)制的整數(shù)。如果?string?以 0 開頭,那么 ECMAScript v3 允許 parseInt() 的一個實現(xiàn)把其后的字符解析為八進(jìn)制或十六進(jìn)制的數(shù)字。如果?string?以 1 ~ 9 的數(shù)字開頭,parseInt() 將把它解析為十進(jìn)制的整數(shù)。
????ParseFloat():從字符串中取出有效的小數(shù),從左向右開始檢查,遇見非數(shù)字的后面不取。
????其他類型:
(3)Boolean
Boolean()函數(shù):
轉(zhuǎn)換為Boolean只有一個方法。
轉(zhuǎn)換值:
數(shù)字:0和NaN為false,其他為true。
字符串:空串為false,其他為true。
null和undefined都是false。
Object(對象)轉(zhuǎn)換也為true。