JavaScript 數據類型轉換(顯式與隱式)

1、數據類型函數

   JS中有5中簡單數據類型(也稱爲基本數據類型):Undefined、Null、Boolean、Number、String。還有一種複雜數據類型------Object,Object本質是由一組無序的名值對組成的。spa

鑑於ECMAScript是鬆散類型的(能夠給變量賦值爲任意類型。),所以須要有一種手段來檢測給定變量的數據類型----typeof就是負責提供這方面信息的操做符。對象

     對一個值使用typeof操做符可能返回下列某個字符串:blog

 

      undefined----若是這個值未初始化或未聲明;    ip

     Boolean----若是這個值是布爾值;字符串

     string---若是這個值是字符串;string

     number----若是這個值是數值;io

     object----若是這個值是對象或null;console

     function----若是這個值是函數。function

有些時候,typeof操做符會返回一些使人迷惑但技術上卻正確的值。好比調用typeof null 會返回「object」,應爲特殊值null被認爲是一個空的對象引用。

從技術角度講,函數在ECMAScript中是對象,不是一種數據類型。然而,函數也確實有一些特殊的屬性,所以經過typeof操做符來區分函數和其餘對象是有必要的。

 


 

2、顯式的轉換數據類型
  顯示的轉換數據類型主要經過JS定義的數據轉換方法。

  a.轉型函數


     轉換爲布爾值:

         Boolean() :將一個值轉換爲其對應的Boolean值

              e.g.    var message = 「Hello world!」;

                       var messageAsBoolean = Boolean(message)

                       console.log(messageAsBoolean);   //true

  各類數據類型及其對應的轉換規則。

     數據類型                  轉換爲true的值               轉換爲false的值

     Boolean                      true                                      false

     String                     任何非空字符串                  「」 (空字符串)

     Number              任何非零數字值(包括無窮大)        0和NaN

     Object                     任何對象                                    null

     Underfined                   n/a                                    undefined

 


     轉換爲數字:

             有3個函數能夠把非數值轉換爲數值:Number()、parseInt()、parseFloat()。第一個函數,即轉型函數Number()能夠用於任何數據類型,而另兩個函數則專門用於把字符串轉換成數值。這三個函數對於一樣的輸入會返回不一樣的結果。

   

   因爲Number()函數在轉換字符串時比較複雜並且不夠合理,所以在處理字符串的時候更經常使用的是parseInt()函數。parseInt()函數在轉換字符串時,更多的是看其是否符合數值模式。它會忽略字符串前面的空格,直至找到第一個非空格字符。若是第一個字符不是數字字符或者負號,parseInt()就會返回NaN;也就是說,用parseInt()轉換空字符串會返回NaN。(Number()對空字符返回0).若是第一個字符是數字字符,parseInt()會繼續解析第二個字符、直至解析完全部後續的字符或者遇到了一個非數字字符。

    與parseInt()函數相似,parseFloat()也是從第一個字符(位置0)開始解析每一個字符。並且也是一直解析到字符串末尾,或者解析到碰見一個無效的浮點數字字符爲止。也就是說,字符串中的第一個小數點是有效的,而第二個小數點就是無效的了,所以它後面的字符串將被忽略。


    轉換爲字符串

            要把一個值轉換爲一個字符串有兩種方式。第一種是使用幾乎每一個值都有的toString()方法,這個方法惟一要作的就是返回相應值的字符串表現。

 

       數值、布爾值、對象、和字符串值(沒錯,每一個字符串也都有一個toString()方法,該方法返回字符串的一個副本)都有toString()方法。但null和undefined值沒有這個方法。

多數狀況下,調用toString()方法沒必要傳遞參數。可是,在調用數值的toString()方法時,能夠傳遞一個參數:輸出數值的基數。默認狀況下,toString()方法以十進制格式返回數值的字符串表示。

在不知道要轉換的值是否是null或undefined的狀況下,還可使用轉型函數String(),這個函數可以將任何類型的值轉換爲字符串。

 


 

3、隱式的數據轉換

  在JS中有一些操做符或者語句也會進行數據轉換。好比if語句將條件轉換爲布爾類型值。


 

    a. 遞增和遞減操做符

       遞增和遞減操做符直接借鑑自C,並且各有兩個版本:前置型和後置型(a++ ,a-- ,++a , --a)。顧名思義,前置型應該位於要操做的變量以前,然後置型應該位於要操做的變量以後。

       這4個操做符對任何值都適用,也就是他們不只適用於整數,還能夠用於字符串、布爾值、浮點數值和對象,此時伴隨着隱式的數據類型轉換


    b. 一元加和減操做符

   在對非數值應用一元加操做符時,該操做符會像Number()轉型函數同樣對這個值執行轉換。換句話說,布爾值false和true將被轉換爲0和1。

   


 

           b. 邏輯非操做符 與 比較操做符 將任意值轉換爲 布爾值

   邏輯非操做符首先會將他的操做數轉換爲一個布爾值,而後再對其求反。

             

   關係比較操做符

 


 

   if,do-while,while語句會將判斷語句轉換爲布爾類型值。

相關文章
相關標籤/搜索