1 回答

TA貢獻(xiàn)137條經(jīng)驗(yàn) 獲得超18個(gè)贊
JavaScript是一種無(wú)類型語(yǔ)言,但同時(shí)JavaScript提供了一種靈活的自動(dòng)類型轉(zhuǎn)換的處理方式?;疽?guī)則是,如果某個(gè)類型的值用于需要其他類型的值的環(huán)境中,JavaScript就自動(dòng)將這個(gè)值轉(zhuǎn)換成所需要的類型。
以下列出JavaScript一種特定類型用于一種特定環(huán)境下時(shí)所執(zhí)行的轉(zhuǎn)換。
? 值?? 字符串?? 數(shù)字?? 布爾值? 對(duì)象
? 未定義的值 ?"undefined"? NaN? ? false? ?? Error
? null?? "null"?? 0? ?? false?????????????????????????? ?Error
?非空字符串 ?As is?????????????????????字符串的數(shù)????????????????? ?true?????????????????????????? String對(duì)象
????? ?????????????????????????????????????????????????????????????? 字值或NaN?
? 空字符串?????????????? As is??????????????????????????? 0?????????????????????????? ?? false?????????????????????????String對(duì)象
?
0????????????????????????? "0"????????????????????????? As
is????????????????????????? false???????????????????????? Number對(duì)象
? NaN????????????????????"NaN"?????????????????????? ?As is????????????????????????? false???????????????????????? Number對(duì)象
? ? 無(wú)窮大??????????????? ??"Infinity"???????????????????? As is?????????????????????????? true?????????????????????????? Number對(duì)象
負(fù)無(wú)窮大????????????? ?"-Infinity"?????????????????? As is????????????????????????????true????????????????????????? Number對(duì)象
? ? 其他所有數(shù)字????? ?數(shù)字的字符串值????????? As is?????????????????????????? true????????????????????????? Number對(duì)象
?
????? true??????????????????? "true"???????????????????????????
1????????????????????????????? As is????????????????????????Boolean對(duì)象
?
???? false????????????????? ?"false"?????????????????????????
0????????????????????????????? As is??????????????????????? Boolean對(duì)象
? ????? 對(duì)象?????????????????toString()??????????????? valueOf()或?????????????????? true????????????????????????? As is
???????????????????????????????????????????????????????????????????????? toString()或??
??????????????????????????????????????????????????????????????????????????? NaN?
需要注意,對(duì)象在處于布爾環(huán)境中,就會(huì)被轉(zhuǎn)換成true。把對(duì)象轉(zhuǎn)換成數(shù)字是通過(guò)首先調(diào)用該對(duì)象的valueOf()方法,大多數(shù)對(duì)象繼承了
Object對(duì)象的默認(rèn)valueOf()方法,它只是返回對(duì)象自身,由于默認(rèn)的valueOf()方法不返回原始值,所以接下來(lái)JavaScript通
過(guò)調(diào)用對(duì)象的toString()方法,再將生產(chǎn)的字符串轉(zhuǎn)換成數(shù)字來(lái)吧對(duì)象轉(zhuǎn)換成數(shù)字。
具體說(shuō)明參見《JavaScript權(quán)威指南》第204頁(yè)。
除了自動(dòng)轉(zhuǎn)換,JavaScript還提供了一種顯式地將值從一種類型轉(zhuǎn)換為另一種類型的轉(zhuǎn)換工具。如Number()、Boolean()、String()和Obejct()都可以作為函數(shù)調(diào)用,它們可以將參數(shù)轉(zhuǎn)換成合適的類型。
下面介紹一些顯式轉(zhuǎn)換的技巧:
要把一個(gè)值轉(zhuǎn)換成字符串,可以把它連接到一個(gè)空串上
? var x_as_string = x+" ";
要把一個(gè)值強(qiáng)制轉(zhuǎn)換成數(shù)字,就用它減0
? var x_as_number = x - 0 ;
要把一個(gè)值強(qiáng)制轉(zhuǎn)換成布爾值,需要連用兩次"!"運(yùn)算符
? var x_as_boolean = !!x;
從數(shù)字到字符串的轉(zhuǎn)換在JavaScript中是最常執(zhí)行的。我們可以通過(guò)以下方法顯式的實(shí)現(xiàn):
? var str = String(number);
? var str = number + "";
? var string = number.toString(); //number被轉(zhuǎn)換成Number對(duì)象,再調(diào)用Number.toString()方法
Number.toString()方法可以指定基數(shù)(2和36之間),如果沒(méi)有指定,默認(rèn)基數(shù)為10。
在ECMAScript
v3和JavaScript
1.5中,添加了三種將數(shù)字轉(zhuǎn)換成字符串的方法,用于顯示具有傳統(tǒng)格式的數(shù)字(如表示貨幣的數(shù)字)。方法toFixed()將把數(shù)字轉(zhuǎn)換成字符串,并顯示
小數(shù)點(diǎn)后指定的位數(shù)。方法toExponential()用指數(shù)計(jì)數(shù)法把數(shù)字轉(zhuǎn)換成字符串,該字符串中的小數(shù)點(diǎn)前有一位數(shù)字,小數(shù)點(diǎn)后指定位數(shù)的數(shù)字。方
法toPrecision()用指定位數(shù)的有效數(shù)字顯示數(shù)字,如果有效數(shù)字的位數(shù)不足以顯示數(shù)字的整數(shù)部分,它將采用指數(shù)計(jì)數(shù)法顯示數(shù)字。這三種方法都回
對(duì)結(jié)果字符串的數(shù)字進(jìn)行適當(dāng)舍入。
?var n = 123456.789;
? n.toFixed(0);?? //"123457"
? n.toFixed(2);? ?//"123456.79"
? n.toExponential(1); ?//"1.2e+5"
?n.toExponential(3); ?//"1.235e+5"
? n.toPrecision(4);? //"1.235e+5"
? n.toPrecision(7);? //"123456.8"
表示數(shù)字的字符串在數(shù)字環(huán)境中會(huì)自動(dòng)轉(zhuǎn)換成真正的數(shù)字。我們也可以顯式地進(jìn)行這一轉(zhuǎn)換。
? var num = Number(str);
? var num = str - 0;
這種字符串到數(shù)字的轉(zhuǎn)換方式,只能用于基數(shù)為10的數(shù)字,而且雖然它允許數(shù)字前后有空格,但是卻不允許字符串中的數(shù)字之后出現(xiàn)任何非空格字符。為此
JavaScript提供了更靈活的進(jìn)行轉(zhuǎn)換的函數(shù)parseInt()和parseFloat()這兩個(gè)函數(shù)將轉(zhuǎn)換并返回一個(gè)字符串開頭的所有數(shù)字,并
忽略其后所有非數(shù)字后綴。對(duì)于以0x和0X開頭的字符串, parseInt()將它解釋為十六進(jìn)制數(shù)。
? parseInt("3 abc");??????????????????//3
? parseFloat("3.15 abc");?????? //3.15
? parseInt("12.34");?????????????????//12
? parseInt("0xFF");????????????????? //255
parseInt()還可以具有第二個(gè)參數(shù),制定要被解析的數(shù)的基數(shù)。其合法值在2到36之間。
如果parseInt()和parseFloat()不能將指定的字符串轉(zhuǎn)換成數(shù)字,將返回NaN:
? parseInt("eleven");? //NaN
? parseFloat("s12.35");? //NaN
添加回答
舉報(bào)