欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ECMAScript 類型轉(zhuǎn)換

所有程序設(shè)計語言最重要的特征之一是具有進行類型轉(zhuǎn)換的能力。

ECMAScript 給開發(fā)者提供了大量簡單的類型轉(zhuǎn)換方法。

大部分類型具有進行簡單轉(zhuǎn)換的方法,還有幾個全局方法可以用于更復(fù)雜的轉(zhuǎn)換。無論哪種情況,在 ECMAScript 中,類型轉(zhuǎn)換都是簡短的一步操作。

轉(zhuǎn)換成字符串

ECMAScript 的 Boolean 值、數(shù)字和字符串的原始值的有趣之處在于它們是偽對象,這意味著它們實際上具有屬性和方法。

例如,要獲得字符串的長度,可以采用下面的代碼:

var sColor = "red";
alert(sColor.length);	//輸出 "3"

盡管 "red" 是原始類型的字符串,它仍然具有屬性 length,用于存放字符串的大小。

總而言之,3 種主要的原始類型 Boolean 值、數(shù)字和字符串都有 toString() 方法,可以把它們的值轉(zhuǎn)換成字符串。

提示:您也許會問,“字符串還有 toString() 方法嗎,這不是多余嗎?”是的,的確如此,不過 ECMAScript 定義所有對象都有 toString() 方法,無論它是偽對象,還是真對象。因為 String 類型屬于偽對象,所以它一定有 toString() 方法。

Boolean 類型的 toString() 方法只是輸出 "true" 或 "false",結(jié)果由變量的值決定:

var bFound = false;
alert(bFound.toString());	//輸出 "false"

Number 類型的 toString() 方法比較特殊,它有兩種模式,即默認(rèn)模式基模式。采用默認(rèn)模式,toString() 方法只是用相應(yīng)的字符串輸出數(shù)字值(無論是整數(shù)、浮點數(shù)還是科學(xué)計數(shù)法),如下所示:

var iNum1 = 10;
var iNum2 = 10.0;
alert(iNum1.toString());	//輸出 "10"
alert(iNum2.toString());	//輸出 "10"

注釋:在默認(rèn)模式中,無論最初采用什么表示法聲明數(shù)字,Number 類型的 toString() 方法返回的都是數(shù)字的十進制表示。因此,以八進制或十六進制字面量形式聲明的數(shù)字輸出的都是十進制形式的。

采用 Number 類型的 toString() 方法的基模式,可以用不同的輸出數(shù)字,例如二進制的基是 2,八進制的基是 8,十六進制的基是 16。

只是要轉(zhuǎn)換成的基數(shù)的另一種加法而已,它是 toString() 方法的參數(shù):

var iNum = 10;
alert(iNum.toString(2));	//輸出 "1010"
alert(iNum.toString(8));	//輸出 "12"
alert(iNum.toString(16));	//輸出 "A"

在前面的示例中,以 3 種不同的形式輸出了數(shù)字 10,即二進制形式、八進制形式和十六進制形式。HTML 采用十六進制表示每種顏色,在 HTML 中處理數(shù)字時這種功能非常有用。

注釋:對數(shù)字調(diào)用 toString(10) 與調(diào)用 toString() 相同,它們返回的都是該數(shù)字的十進制形式。

參閱:

請參閱 JavaScript 參考手冊提供的有關(guān) toString() 方法的詳細信息:

轉(zhuǎn)換成數(shù)字

ECMAScript 提供了兩種把非數(shù)字的原始值轉(zhuǎn)換成數(shù)字的方法,即 parseInt() 和 parseFloat()。

正如您可能想到的,前者把值轉(zhuǎn)換成整數(shù),后者把值轉(zhuǎn)換成浮點數(shù)。只有對 String 類型調(diào)用這些方法,它們才能正確運行;對其他類型返回的都是 NaN。

parseInt()

在判斷字符串是否是數(shù)字值前,parseInt() 和 parseFloat() 都會仔細分析該字符串。

parseInt() 方法首先查看位置 0 處的字符,判斷它是否是個有效數(shù)字;如果不是,該方法將返回 NaN,不再繼續(xù)執(zhí)行其他操作。但如果該字符是有效數(shù)字,該方法將查看位置 1 處的字符,進行同樣的測試。這一過程將持續(xù)到發(fā)現(xiàn)非有效數(shù)字的字符為止,此時 parseInt() 將把該字符之前的字符串轉(zhuǎn)換成數(shù)字。

例如,如果要把字符串 "12345red" 轉(zhuǎn)換成整數(shù),那么 parseInt() 將返回 12345,因為當(dāng)它檢查到字符 r 時,就會停止檢測過程。

字符串中包含的數(shù)字字面量會被正確轉(zhuǎn)換為數(shù)字,比如 "0xA" 會被正確轉(zhuǎn)換為數(shù)字 10。不過,字符串 "22.5" 將被轉(zhuǎn)換成 22,因為對于整數(shù)來說,小數(shù)點是無效字符。

一些示例如下:

var iNum1 = parseInt("12345red");	//返回 12345
var iNum1 = parseInt("0xA");	//返回 10
var iNum1 = parseInt("56.9");	//返回 56
var iNum1 = parseInt("red");	//返回 NaN

parseInt() 方法還有基模式,可以把二進制、八進制、十六進制或其他任何進制的字符串轉(zhuǎn)換成整數(shù);怯 parseInt() 方法的第二個參數(shù)指定的,所以要解析十六進制的值,需如下調(diào)用 parseInt() 方法:

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

當(dāng)然,對二進制、八進制甚至十進制(默認(rèn)模式),都可以這樣調(diào)用 parseInt() 方法:

var iNum1 = parseInt("10", 2);	//返回 2
var iNum2 = parseInt("10", 8);	//返回 8
var iNum3 = parseInt("10", 10);	//返回 10

如果十進制數(shù)包含前導(dǎo) 0,那么最好采用基數(shù) 10,這樣才不會意外地得到八進制的值。例如:

var iNum1 = parseInt("010");	//返回 8
var iNum2 = parseInt("010", 8);	//返回 8
var iNum3 = parseInt("010", 10);	//返回 10

在這段代碼中,兩行代碼都把字符 "010" 解析成一個數(shù)字。第一行代碼把這個字符串看作八進制的值,解析它的方式與第二行代碼(聲明基數(shù)為 8)相同。最后一行代碼聲明基數(shù)為 10,所以 iNum3 最后等于 10。

參閱

請參閱 JavaScript 參考手冊提供的有關(guān) parseInt() 方法的詳細信息:parseInt()。

parseFloat()

parseFloat() 方法與 parseInt() 方法的處理方式相似,從位置 0 開始查看每個字符,直到找到第一個非有效的字符為止,然后把該字符之前的字符串轉(zhuǎn)換成整數(shù)。

不過,對于這個方法來說,第一個出現(xiàn)的小數(shù)點是有效字符。如果有兩個小數(shù)點,第二個小數(shù)點將被看作無效的。parseFloat() 會把這個小數(shù)點之前的字符轉(zhuǎn)換成數(shù)字。這意味著字符串 "11.22.33" 將被解析成 11.22。

使用 parseFloat() 方法的另一不同之處在于,字符串必須以十進制形式表示浮點數(shù),而不是用八進制或十六進制。該方法會忽略前導(dǎo) 0,所以八進制數(shù) 0102 將被解析為 102。對于十六進制數(shù) 0xA,該方法將返回 NaN,因為在浮點數(shù)中,x 不是有效字符。(注釋:經(jīng)測試,具體的瀏覽器實現(xiàn)會返回 0,而不是 NaN。)

此外,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

親自試一試

參閱

請參閱 JavaScript 參考手冊提供的有關(guān) parseFloat() 方法的詳細信息:parseFloat()

強制類型轉(zhuǎn)換

您還可以使用強制類型轉(zhuǎn)換(type casting)來處理轉(zhuǎn)換值的類型。使用強制類型轉(zhuǎn)換可以訪問特定的值,即使它是另一種類型的。

編者注:cast 有“鑄造”之意,很貼合“強制轉(zhuǎn)換”的意思。

ECMAScript 中可用的 3 種強制類型轉(zhuǎn)換如下:

  • Boolean(value) - 把給定的值轉(zhuǎn)換成 Boolean 型;
  • Number(value) - 把給定的值轉(zhuǎn)換成數(shù)字(可以是整數(shù)或浮點數(shù));
  • String(value) - 把給定的值轉(zhuǎn)換成字符串;

用這三個函數(shù)之一轉(zhuǎn)換值,將創(chuàng)建一個新值,存放由原始值直接轉(zhuǎn)換成的值。這會造成意想不到的后果。

Boolean() 函數(shù)

當(dāng)要轉(zhuǎn)換的值是至少有一個字符的字符串、非 0 數(shù)字或?qū)ο髸r,Boolean() 函數(shù)將返回 true。如果該值是空字符串、數(shù)字 0、undefined 或 null,它將返回 false。

可以用下面的代碼測試 Boolean 型的強制類型轉(zhuǎn)換:

var b1 = Boolean("");		//false - 空字符串
var b2 = Boolean("hello");		//true - 非空字符串
var b1 = Boolean(50);		//true - 非零數(shù)字
var b1 = Boolean(null);		//false - null
var b1 = Boolean(0);		//false - 零
var b1 = Boolean(new object());	//true - 對象

Number() 函數(shù)

Number() 函數(shù)的強制類型轉(zhuǎn)換與 parseInt() 和 parseFloat() 方法的處理方式相似,只是它轉(zhuǎn)換的是整個值,而不是部分值。

還記得嗎,parseInt() 和 parseFloat() 方法只轉(zhuǎn)換第一個無效字符之前的字符串,因此 "1.2.3" 將分別被轉(zhuǎn)換為 "1" 和 "1.2"。

用 Number() 進行強制類型轉(zhuǎn)換,"1.2.3" 將返回 NaN,因為整個字符串值不能轉(zhuǎn)換成數(shù)字。如果字符串值能被完整地轉(zhuǎn)換,Number() 將判斷是調(diào)用 parseInt() 方法還是 parseFloat() 方法。

下表說明了對不同的值調(diào)用 Number() 方法會發(fā)生的情況:

用法 結(jié)果
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

String() 函數(shù)

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

要執(zhí)行這種強制類型轉(zhuǎn)換,只需要調(diào)用作為參數(shù)傳遞進來的值的 toString() 方法,即把 12 轉(zhuǎn)換成 "12",把 true 轉(zhuǎn)換成 "true",把 false 轉(zhuǎn)換成 "false",以此類推。

強制轉(zhuǎn)換成字符串和調(diào)用 toString() 方法的唯一不同之處在于,對 null 和 undefined 值強制類型轉(zhuǎn)換可以生成字符串而不引發(fā)錯誤:

var s1 = String(null);	//"null"
var oNull = null;
var s2 = oNull.toString();	//會引發(fā)錯誤

在處理 ECMAScript 這樣的弱類型語言時,強制類型轉(zhuǎn)換非常有用,不過應(yīng)該確保使用值的正確。