在javascript 裏面,當一種類型的值用於需要某種其他類型的值的環境中,那麼javascript將自動嘗試把值轉換爲所需類型,而這就是javascript的自動類型轉換機制。
下標簡單的描述了所有數據類型轉換的過程:這裏所要轉換成的類型是 字符串,數字,布爾,對象:見下表。。。。。。
-------------------------------------------------------------------------------------------------------
在這裏主要說說對象這種類型到基本數據類型的轉化:
1.轉換成布爾值
無論在什麼情況下,一個非空對象在布爾環境中的時候,它都是被轉換爲true。這對於任何對象,數字倘或函數都是適用的。
2.轉換成數字
在對象轉換爲數字時,其有幾個步驟要做的。首先調用通過調用對象的valueOf方法來轉換爲數字的對象。由於大多對象默認的valueOf()方法什麼都沒有做,所以調用了這個方法後,其返回的都是對象本身,所以接下來的一步就是調用toString()方法,在返回對象的字符串後,就嘗試把結果轉換爲一個數字。
這對數組產生了一個有趣的結果。數組的toString()方法吧數組元素轉換爲字符串,然後把各個字符連接起來,形成結果。如果沒有元素,那麼就會轉換爲0。如果只有一個元素,而且是一個數字,那麼轉換結果就是這個數字。如果包含多個元素,如果其中一個元素不是數字,都會返還NaN.
和數據類型緊密相關的是運算符產生的結果:
對於一個對象和一個運算符使用的情況,它應該自動轉換爲數字還是字符串,這仍然不是很明確。但是我們遵循轉換的步驟的話,就能夠推敲的出其結果了。
值 |
值所使用的環境 |
|||
字符串 |
數字 |
布爾 |
對象 |
|
未定義值 |
‘undefined’ |
NaN |
False |
Error |
null |
‘null’ |
0 |
False |
Error |
非空字符串 |
不變 |
字符串的數字 值或NaN |
True |
String對象 |
空字符串 |
不變 |
0 |
False |
String對象 |
0 |
‘0’ |
不變 |
False |
Number 對象 |
NaN |
‘NaN’ |
不變 |
False |
Number 對象 |
無窮 |
‘infinity’ |
不變 |
True |
Number對象 |
負無窮 |
‘-infinity’ |
不變 |
True |
Number 對象 |
True |
‘true’ |
1 |
不變 |
Boolean對象 |
False |
‘false’ |
0 |
不變 |
Boolean對象 |
對象 |
to String() |
valueOf() , toString(), 或者NaN |
True |
不變 |