Javascript類型轉換:
值 | 轉換為:字符串 | 數字 | 布爾值 | 對象 |
undefined | “undefined” | NaN | false | throws TypeError |
null | “null” | 0 | false | throws TypeError |
true | “true” | 1 | new Boolean(true) | |
false | “false” | 0 | new Boolean(false) | |
“”空字符串 | 0 | false | new String(“”) | |
“1.2”(非空,數字) | 1.2 | true | new String(“1.2”) | |
“one”(非空,非數字) | NaN | true | new String(“one”) | |
0 | “0” | false | new Number(0) | |
-0 | “0” | false | new Number(-0) | |
NaN | “NaN” | false | new Number(NaN) | |
Infinity | “Infinity” | true | new Number(Infinity) | |
-Infinity | “-Infinity” | true | new Number(-Infinity) | |
1(無窮大,非零) | “1” | true | new Number(1) | |
{}(任意對象) | true | |||
[](任意數組) | “” | 0 | true | |
[9](1個數字對象) | “9” | 9 | true | |
[‘a’](其他數組) | 使用join()方法 | NaN | true | |
function(){}(任意函數) | NaN | true |
轉換和相等性
null==undefined //這兩值被認為相等
“0”=0 //在比較之前字符串轉換成數字
0==false //在比較之前布爾值轉換成數字
“0”==false //在比較之前字符串和布爾值都轉換成數字
“==”等於運算符在判斷兩個值是否相等時會進行類型轉換,但一個值轉換為另一個值並不意味着兩個值相等。而“===”恆等運算符在判斷相等時並未做任何類型轉換。
顯示類型轉換
使用Boolean()、Number()、String()或Object()函數進行顯示類型轉換。
例如:
Number(“1”) //3
String(false) //”false”,等價於false.toString()
【另外注意:除了null、undefined之外的任何值都有toString()方法】
Boolean([]) //true
Object(3) //new Number(3)
Number類定義的toString()方法可以接收表示轉換基數(radix)【轉換基數指二進、八進制、十六進制】,不指定則轉換規則默認為十進制,radix取值范圍為2~36之間。如果通過Number()轉換函數傳入一個字符串,它會試圖將其轉換為一個整數或浮點數直接量,這個方法只能基於十進制進行轉換,並且不能出現非法的尾隨字符。parseInt()和parseFloat()函數(它們是全局函數,不從屬於任何類的方法)則靈活點,parseInt()只解析整數,而parseFloat()則可以解析整數和浮點數。如果字符串前綴是“0x”或者“0X”,parseInt()將其解釋為十六進制數,parseInt()和parseFloat()都會跳過任意數量的前導空格,盡可能解析更多數值字符,並忽略后面的內容。如果第一個非空字符是非法的數字直接量,將返回NaN:
例如:
parseInt(”3 blind mice”) //3
parseFloat(“3.14 meters”) //3.14
parseInt(“0xFF”) //255
parseFloat(“.1”) //0.1
parseInt(“.1”) //0
parseInt()可以接收第二個參數,這個參數指定數字轉換的基數,合法的取值范圍是2~36
隱式類型轉換
js中的某些運算符會做隱式的類型轉換。如果”+”運算符的一個操作數是字符串,它將會把另外一個操作數轉換為字符串。一元“+”運算符將其操作數轉換為數字。一元“!”運算符將其操作數轉換為布爾值並取反。
例如:
x+"" //等價於String(x)
+x //等價於Number(x),也可以寫成x-0
!!x //等價於Boolean(x)
對象轉換為原始值
對象到布爾值的轉換非常簡單:所有對象(包括數組和函數)都轉換為true。
所有的對象繼承了兩個轉換方法:
1、toString():它的作用是返回一個反映這個對象的字符串。默認的toString()方法並不會返回一個有趣的值
2、valueOf():如果存在任意原始值,它就默認將對象轉換為表示它的原始值。對象是復合值,而且大多數對象無法真正表示為一個原始值,因此默認的valueOf()方法簡單地返回對象本身,而不是返回一個原始值。
js中對象到字符串的轉換經過如下步驟:
①如果對象有toString()方法,則調用這個方法。如果返回一個原始值,js將這個值轉換為字符串(如果本身不是字符串),並返回這個字符串結果
②如果對象沒有toString()方法,或者這個方法返回的並不是一個原始值,那么js會調用valueOf()方法(如果存在此方法)。如果返回值是原始值,js將這個值轉換為字符串(如果本身不是字符串的話),並返回這個字符串結果
③否則,js無法從toString()或valueOf()獲得一個原始值,因此這時它將拋出一個類型錯誤異常
js中對象到數字的轉換過程中,js做了同樣的事情,只是它會首先嘗試使用valueOf()方法
①如果對象具有valueOf()方法,或者返回一個原始值,則js將這個原始值轉換為數字(如果需要的話)並返回、這個數字
②否則,如果對象具有toString()方法,后者返回一個原始值,則js將其轉換並返回
③否則,js拋出一個類型錯誤異常