閱讀705 返回首頁    go 阿裏雲 go 技術社區[雲棲]


JavaScript類型轉換

 

JavaScript中有三個基本包裝類型Boolean,Number,String

 

一 轉換為字符串

三種主要的原始類型Boolean值、數字和字符串都有toString()方法,可以把它們的值轉換成字符串。

String類型

var sColor = "red";
alert(sColor.length); 
返回 "3"
盡管"red"是原始類型的字符串,它仍然具有屬性length,用於存放字符串的大小。
 


Boolean類型—String類型

Boolean類型的toString()方法隻是輸出 "true" 或 "false",結果由變量的值決定:
var bFound = false;
alert(bFound.toString());
返回 "false"

 

Number類型—String類型

Number類型的toString()方法比較特殊,它有兩種模式,默認模式基模式

采用默認模式toString() 方法隻是用相應的字符串輸出數字值(無論是整數、浮點數還是科學計數法)
  
var iNum1 = 10;
var iNum2 = 10.0;
alert(iNum1.toString());
返回 "10"

alert(iNum2.toString());
返回 "10"
  
在默認模式中,無論最初采用什麼表示法聲明數字,Number類型的toString()方法返回的都是數字的十進製表示。因此以八進製或十六進製字麵量形式聲明的數字輸出的都是十進製形式的。

采用基模式可以用不同的基輸出數字,例如二進製的基是2,八進製的基是8,十六進製的基是16。
  
基隻是要轉換成的基數的另一種加法而已,它是toString() 方法的參數:
var iNum = 10;

alert(iNum1.toString(2)); 
返回 "1010"

alert(iNum1.toString(8)); 
返回 "12"

alert(iNum1.toString(16));
返回 "A"

在前麵的示例中,以3種不同的形式輸出了數字10,即二進製形式、八進製形式和十六進製形式。HTML 采用十六進製表示每種顏色,在 HTML 中處理數字時這種功能非常有用。對數字調用toString(10) 與調用 toString() 相同,返回的都是該數字的十進製形式。
 

 

二 轉換成數字

ECMAScript 提供了兩種把非數字的原始值轉換成數字的方法,即 parseInt() 和 parseFloat()。前者把值轉換成整數,後者把值轉換成浮點

數。隻有對 String 類型調用這些方法,它們才能正確運行;對其他類型返回的都是 NaN。

1 parseInt()

在判斷字符串是否是數字值前,parseInt() 和 parseFloat() 都會仔細分析該字符串。
parseInt() 方法首先查看位置0處的字符,判斷它是否是個有效數字;如果不是,該方法將返回NaN,不再繼續執行其他操作。但如果該字符是有效數字,該方法將查看位置1 處的字符,進行同樣的測試。這一過程將持續到發現非有效數字的字符為止,此時parseInt() 將把該字符之前的字符串轉換成數字。
  
如果要把字符串"12345red"轉換成整數,那麼parseInt()將返回12345,因為當它檢查到字符r時,就會停止檢測過程。字符串中包含的數字字麵量會被正確轉換為數字,比如"0xA"會被正確轉換為數字10。不過,字符串"22.5"將被轉換成22,因為對於整數來說,小數點是無效字符。

var iNum1 = parseInt("12345red");
返回12345

var iNum1 = parseInt("0xA");
返回10

var iNum1 = parseInt("56.9");
返回56

var iNum1 = parseInt("red");
返回NaN
  
parseInt()方法還有基模式,可以把二進製、八進製、十六進製或其他任何進製的字符串轉換成整數。基是由parseInt()方法的第二個參數指定的,當然,對二進製、八進製、十六進製甚至十進製(默認模式),都可以調用parseInt()方法:
  
var iNum1 = parseInt("10", 2);
返回2

var iNum2 = parseInt("10", 8);
返回8

var iNum1 = parseInt("AF", 16);
返回175

var iNum3 = parseInt("10", 10);
返回10
  
如果十進製數包含前導 0,那麼最好采用基數 10,這樣才不會意外地得到八進製的值。例如:

var iNum1 = parseInt("010");
返回8

var iNum2 = parseInt("010", 8);
返回8

var iNum3 = parseInt("010", 10);
返回10
  
在這段代碼中,兩行代碼都把字符"010"解析成一個數字。第一行代碼把這個字符串看作八進製的值,解析它的方式與第二行代碼(聲明基數為8)相同。最後一行代碼聲明基數為10,所以 iNum3 最後等於10。


2 parseFloat()
  
parseFloat()方法與parseInt()方法的處理方式相似,從位置0開始查看每個字符,直到找到第一個非有效的字符為止,然後把該字符之前的字符串轉換成整數。
  
不過,對於這個方法來說,第一個出現的小數點是有效字符。如果有兩個小數點,第二個小數點將被看作無效的。parseFloat()會把這個小數點之前的字符轉換成數字。這意味著字符串 "11.22.33" 將被解析成 11.22。使用 parseFloat() 方法的另一不同之處在於,字符串必須以十進製形式表示浮點數,而不是用八進製或十六進製。該方法會忽略前導 0,所以八進製數0102將被解析為 02。對於十六進製數0xA,該方法將返回 NaN,因為在浮點數中,x不是有效字符。此外,parseFloat()方法也沒有基模式。下麵是使用parseFloat()方法的一些示例:
  
var fNum1 = parseFloat("12345red");
返回 12345

var fNum2 = parseFloat("0xA");
返回 NaN

var fNum3 = parseFloat("11.2");
返回 11.2

var fNum4 = parseFloat("11.22.33");
返回 11.22

var fNum5 = parseFloat("0102");
返回 102
 
var fNum1 = parseFloat("red");
返回 NaN

 

三 強製類型轉換

您還可以使用強製類型轉換(type casting)來處理轉換值的類型。使用強製類型轉換可以訪問特定的值,即使它是另一種類型的。cast 有鑄造之意,很貼合強製轉換的意思。

ECMAScript 中可用的 3 種強製類型轉換如下:
Boolean(value) - 把給定的值轉換成 Boolean 型;
Number(value)  - 把給定的值轉換成數字(可以是整數或浮點數);
String(value)  - 把給定的值轉換成字符串;

用這三個函數之一轉換值,將創建一個新值,存放由原始值直接轉換成的值。這會造成意想不到的後果。


1 Boolean() 函數
  
當要轉換的值是至少有一個字符的字符串、非0數字或對象時,Boolean()函數將返回 true。如果該值是空字符串、數字0、undefined或null,它將返回 false。
  
可以用下麵的代碼測試 Boolean 型的強製類型轉換:
  
var b1 = Boolean(""); 
返回false - 空字符串
  
var b2 = Boolean("hello"); 
返回true - 非空字符串
  
var b1 = Boolean(50); 
返回true - 非零數字

var b1 = Boolean(0); 
返回false - 零
  
var b1 = Boolean(null); 
返回false - null

  
var b1 = Boolean(new object());
返回true - 對象


2 Number() 函數

Number() 函數的強製類型轉換與parseInt() 和parseFloat() 方法的處理方式相似,隻是它轉換的是整個值,而不是部分值。

還記得嗎,parseInt() 和parseFloat() 方法隻轉換第一個無效字符之前的字符串,因此 "1.2.3" 將分別被轉換為 "1" 和 "1.2"。用Number() 進行強製類型轉換,"1.2.3" 將返回 NaN,因為整個字符串值不能轉換成數字。如果字符串值能被完整地轉換,Number() 將判斷是調用 parseInt() 方法還是 parseFloat() 方法。下表說明了對不同的值調用 Number()方法會發生的情況:

Number(false)
返回0
  
Number(true)
返回1
  
Number(undefined)
返回NaN
  
Number(null)
返回0
  
Number("1.2")
返回1.2
  
Number("12")
返回12
  
Number("1.2.3")
返回NaN
  
Number(new object())
返回NaN
  
Number(50)
返回50


3 String() 函數

最後一種強製類型轉換方法 String() 是最簡單的,因為它可把任何值轉換成字符串。

要執行這種強製類型轉換,隻需要調用作為參數傳遞進來的值的 toString() 方法,即把12轉換成 "12",把true轉換成 "true",把false轉換成 "false",以此類推。
  
強製轉換成字符串和調用toString()方法的唯一不同之處在於,對null和undefined值強製類型轉換可以生成字符串而不引發錯誤:
  
var s1 = String(null);
返回"null"
  
var oNull = null;
var s2 = oNull.toString();
會引發錯誤
  
在處理 ECMAScript 這樣的弱類型語言時,強製類型轉換非常有用,不過應該確保使用值的正確。

 

原帖地址 https://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=12720

 

 

 

最後更新:2017-04-02 16:48:03

  上一篇:go Android應用安裝錯誤:INSTALL_FAILED_MEDIA_UNAVAILABLE
  下一篇:go Huffman 編碼壓縮算法