javaScript
類型轉換規則javaScript
的類型轉換其實一直是不少前端開發人員很迷的地方,一下子這裏要轉換,一下子那裏又要轉換,總之就是一個大寫的迷,由於它隱式類型轉換的地方實在是太多了。前端
但其實它仍是有規律可尋的,只要記憶一些基本的轉換規則並掌握這些規律,就能很好的理清楚javaScript
隱式類型轉換何時發生以及它進行怎樣的轉換。java
下面先看看涉及到的幾個函數以及他們的轉換規則,這個是須要記憶的內容函數
布爾值
,用到的是Boolean()
數值
,用到的是Number()
,固然還有parseInt()、parseFloat()
,可是對於隱式類型轉換的時候,調用的是前者。字符串
,用到的是toString()、String()
Boolean()
對於不一樣的數據類型,轉換規則不同編碼
Boolean
類型: true -> true
, false -> false
String
類型: 任何非空字符 -> true
, 空字符 -> false
Number
類型: 任何非零數字(包括無窮大) -> true
, 0和NaN -> false
Object
類型: 任何對象啊 -> true
, null(特殊的對象,實質是是Object的派生) -> false
Udefined
類型: 始終爲轉換爲false
Number()
Boolean
類型: true -> 1
, false -> 0
Number
類型: 只是簡單的傳入和傳出null
: 返回0Udefined
類型: 返回NaN
字符串
類型:spa
011 -> 11
會忽略前面的0oxf
,則將其轉換爲相同大小的十進制整數NaN
對象
:先調用對象的valueOf()
方法,而後依照前面列舉的規則轉換返回的值,若是轉換的結果是NaN
,再調用對象的toString()
方法,也依照前面的規則轉換返回的字符串值toString()、String()
除了null、undefined
,其餘數據類型都含有toString()
這個方法,直接調用便可,null、undefined
可用String()
來轉換設計
以上規則來源於 javaScript高級程序設計第三版
只要你的數據類型和你使用的操做符所適用的數據類型不一樣時(除了相等操做符==、!=
),就會調用前面提到的相應的類型轉換方法來進行轉換。
若是被轉換類型是Object
,那麼會先調用自身的valueOf()
,根據狀況決定是否繼續調用toString()
,並將獲得的值傳入類型轉換方法中。
若是是二元加性操做符(+
),若是有一個值爲字符串,那麼結果始終爲字符串。
若是是關係運算符<、<=、>、>=
,對於兩邊都是字符串的狀況,會比較兩個字符串對應的字符編碼,而不是將其轉換爲number
。code
一元操做符++、--
,一元加減操做符+、-
,位操做符~、&、|、^、<<、>>、>>>
,乘性操做符*、/、%
,加性操做符加法+、減法-
,關係操做符<、>、<=、>=
,它們都是對Number
類型的值進行操做,若是發現類型不對,就會調用Number()
來轉換。對象
對於操做布爾類型的操做符如!、&&、||
,若是任意一邊不是布爾值,則會調用Boolean()
來轉換。ip
==、!=
對於相等操做符,它的類型轉換就比較複雜了,咱們上面的規則也不適用於它,這裏仍是列出來。
這個表展現的是對於不一樣類型的組合,是怎麼轉換的,而且將最終轉換的結果使用全等===
來比較。開發
javaScript高級程序設計
上說的很分散並且也不少,沒有統一說明,讓人很暈,上面是我總結出來的,中間有一個小地方我沒指明,由於還沒確認,由於我的以爲這是一個錯誤,該錯誤已上報給出版社,若確認是一個錯誤,那麼我將不會在這裏指出,否者我將把這個小知識點添加到本文結語後面部分。上面的數據類型轉換歸納的很全面,也很容易理解,但願對你有幫助。
總結來自 javaScript高級程序設計第三版