Front-end developmenter必看,超實用的javaScript隱式類型轉換規則記憶技巧。

javaScript類型轉換規則

javaScript的類型轉換其實一直是不少前端開發人員很迷的地方,一下子這裏要轉換,一下子那裏又要轉換,總之就是一個大寫的迷,由於它隱式類型轉換的地方實在是太多了。前端

但其實它仍是有規律可尋的,只要記憶一些基本的轉換規則並掌握這些規律,就能很好的理清楚javaScript隱式類型轉換何時發生以及它進行怎樣的轉換。java

下面先看看涉及到的幾個函數以及他們的轉換規則,這個是須要記憶的內容函數

類型轉換須要使用到的函數

  • 對於布爾值,用到的是Boolean()
  • 對於數值,用到的是Number(),固然還有parseInt()、parseFloat(),可是對於隱式類型轉換的時候,調用的是前者。
  • 對於字符串,用到的是toString()、String()

Boolean()

對於不一樣的數據類型,轉換規則不同編碼

  1. Boolean類型: true -> true, false -> false
  2. String類型: 任何非空字符 -> true, 空字符 -> false
  3. Number類型: 任何非零數字(包括無窮大) -> true, 0和NaN -> false
  4. Object類型: 任何對象啊 -> true, null(特殊的對象,實質是是Object的派生) -> false
  5. Udefined類型: 始終爲轉換爲false

Number()

  1. Boolean類型: true -> 1, false -> 0
  2. Number類型: 只是簡單的傳入和傳出
  3. null: 返回0
  4. Udefined類型: 返回NaN
  5. 字符串類型:spa

    • 若字符串中只包含數字(包含正負號),則將其轉換爲十進制數,注意011 -> 11會忽略前面的0
    • 若是字符串中包含有效的浮點格式,如'1.1',則將其轉換爲對應的浮點數值(一樣也會忽略前導零)
    • 若是字符串包含有效的十六進制格式,例如oxf,則將其轉換爲相同大小的十進制整數
    • 若是字符串是空的,轉換爲0
    • 若是字符串包含上述格式以外的字符,則將其轉換爲NaN
  6. 對象:先調用對象的valueOf()方法,而後依照前面列舉的規則轉換返回的值,若是轉換的結果是NaN,再調用對象的toString()方法,也依照前面的規則轉換返回的字符串值

toString()、String()

除了null、undefined,其餘數據類型都含有toString()這個方法,直接調用便可,null、undefined可用String()來轉換設計

以上規則來源於 javaScript高級程序設計第三版

那何時進行隱式類型轉換呢?

規則

只要你的數據類型和你使用的操做符所適用的數據類型不一樣時(除了相等操做符==、!=),就會調用前面提到的相應的類型轉換方法來進行轉換。
若是被轉換類型是Object,那麼會先調用自身的valueOf(),根據狀況決定是否繼續調用toString(),並將獲得的值傳入類型轉換方法中。
若是是二元加性操做符(+),若是有一個值爲字符串,那麼結果始終爲字符串。
若是是關係運算符<、<=、>、>=,對於兩邊都是字符串的狀況,會比較兩個字符串對應的字符編碼,而不是將其轉換爲numbercode

數值類型操做符

一元操做符++、--,一元加減操做符+、-,位操做符~、&、|、^、<<、>>、>>>,乘性操做符*、/、%,加性操做符加法+、減法-,關係操做符<、>、<=、>=,它們都是對Number類型的值進行操做,若是發現類型不對,就會調用Number()來轉換。對象

布爾操做符

對於操做布爾類型的操做符如!、&&、||,若是任意一邊不是布爾值,則會調用Boolean()來轉換。ip

相等操做符==、!=

對於相等操做符,它的類型轉換就比較複雜了,咱們上面的規則也不適用於它,這裏仍是列出來。
這個表展現的是對於不一樣類型的組合,是怎麼轉換的,而且將最終轉換的結果使用全等===來比較。開發

clipboard.png

結語

javaScript高級程序設計上說的很分散並且也不少,沒有統一說明,讓人很暈,上面是我總結出來的,中間有一個小地方我沒指明,由於還沒確認,由於我的以爲這是一個錯誤,該錯誤已上報給出版社,若確認是一個錯誤,那麼我將不會在這裏指出,否者我將把這個小知識點添加到本文結語後面部分。上面的數據類型轉換歸納的很全面,也很容易理解,但願對你有幫助。

總結來自 javaScript高級程序設計第三版
相關文章
相關標籤/搜索