1 回答

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