javascript中變量的類型轉換

JavaScript中的取值類型非常靈活,當javascript期望使用一個布爾值的時候,你可以提供任意類型值,javascript將根據需要自行轉換類型,一些真值轉換爲true,其他值轉換爲false。這在其他類型中同樣適用:如果javascript期望使用一個字符串,它把給定的值 將轉換爲字符串。如果javascript期望使用一個數字,它把給定的值將轉換爲數字(轉換結果無意義的話將返回NaN)。
下圖是javascript中原始值到原始值的轉換規律:

這裏寫圖片描述

1、變量的顯示類型轉換

做顯式類型轉換最簡單的方法就是使用Boolean()、Number()、String()、或Object()函數。當不通過new運算符調用這些函數時,它們會作爲類型轉換函數並按照上圖描述的規則做類型轉換。
需要注意的是,除了null或undefined之外的任何值都具有toString()方法,這個方法的執行結果通常和String()方法的返回結果一致。還有就是,如果試圖把null或undefined轉換爲對象,則會產生一個類型錯誤(TypeError)。
 在javascript中提供了專門的函數和方法用來做更加精確的數字到字符串和字符串到數字的轉換。
 Number類的toString()方法可以接收表示轉換基數的可選參數,如果不指定此參數,轉換規則將是基於十進制。同樣可以將數字轉換爲其他進制婁(範圍在2~36之間),例如:
 var n = 17;
 binary_string = n.toString(2);//轉換爲“10001”
 octal_string = "0" + n.toString(8)//轉換爲“021”
 hex_string = "ox" + n.toString(16)//轉換爲“0x11”
 類似的,還有其他的一些方法,例如:

var n=123456.789;
n.toFixed(0);//”123457”
n.toFixed(2);//”12345679”
n.toFixed(5);//”123456.78900”
n.toExponential(1);//”1.2e+5”
n.toExponential(3);//”1.235e+5”
n.toPrecision(4);//”1.235e+5”
n.toPrecision(7);//”123546.8”
n.toPrecision(7);//”123456.7890”
方法說明:
toFixed()根據指數記數法將數字 轉換爲字符串,它從不使用指數記數法
toExponential()使用指數指數記數法將數字轉換爲指數形式的字符串
toPrecision()根據指定的有效數字位數將數字轉換爲字符串。
最後就是parseInt()(只解析整數)和parseFloat()(可以解析整數和浮點數)方法;
parseInt()可以對前綴是”0x”或者”0X”的字符串進行十六進制數的解析,兩個方法均可以跳過任意數量的前導空格,儘可能解析更多數值字符,並忽略後面的內容。如果第一個非空格字符是非法的數字直接量,則返回NaN。
parseInt(“2+3”) //結果爲2
parseInt(“-12.34”) //-12
parseInt(“0xFF”) //255
parseInt(“-0xFF”) //-255
parseFloat(“.1”) //0.1
parseInt(“.1”) //NaN:整數不能以.開始
parseFloat(“721.5")//NaN 開始
此外,parseInt()可以接收第二個可選參數,這個參數指定數字轉換的基數,合法的取值範圍是2~36。
2、對象到原始值的轉換
對象到布爾值的轉換非常簡單:所有對象(包括數組和函數)都轉換爲true。包裝對象亦是如此:new Boolean(false)是一個對象而不是原始值,它將轉換爲true。
對象到字符串和對象到數字的轉換是通過調用待轉換對象的相關方法來實現的(toString()和valueOf())。這裏說的轉換規則只適用於本地對象,宿主對象根據各自的算法可以轉換成字符串和數字。
toString()方法返回一個表示對象的字符串,valueOf()返回將對象轉換爲表示它的原始值,但大多數對象無法真正表示爲一個原始值,因此默認的valueOf()方法簡單地返回對象本身,而不是返回一個原始值。數組、函數和正則表達式簡單地繼承了這個默認方法,調用這些類型的實例的valueOf()方法只是 簡單返回對象本身。日期類定義的valueOf()方法會返回它的一個內部表示:1970年1月1日以來的毫秒數。
javascript中對象到字符串的轉換經過了如下這些步驟:
如果對象具有toString()方法,則調用這個 方法。如果它返回一個原始值,javascript將這個 值轉換爲字符串(如果本身不是字符串的話),並返回這個字符串結果。
如果對象沒有toString()方法,或者這個 方法並不返回一個原始值 ,那麼javascript就會調用valueOf()方法。如果存在這個方法,則調用它。如果返回值是原始值,javascript將這個值轉換爲字符串(如果本身不是字符串的話),並返回這個字符串結果。
否則,javascript無法從toString()或valueOf()方法獲得一個原始值,因此這時它將拋出一個類型錯誤異常。
對象到數字的轉換過程中,javascript估了同樣的事情,只是它會首先嚐試使用valueOf()方法。
最後需要注意的是,”+”和“==”應用的對象到原始值 的轉換包含日期對象的一種特殊情形。日期類是javascript語言核心中唯一的預先定義的類型,它定義了有意義的向字符串和數字類型的轉換。對於所有的非日期的對象來說,對象到原始的轉換基本上是對象到數字的轉換,日期對象則使用對象到字符串的轉換模式,然而,這裏的轉換和上面提到的並不完全一致:通過valueOf()或toString()返回的原始值將被直接使用,而不會被強制轉換爲數字或字符串。

發佈了45 篇原創文章 · 獲贊 7 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章