在js的使用中,常常會遇到 數據類型的轉換。下面來描述一下數據類型之間轉換的規則。函數
1、Boolean類型的轉換測試
數據類型 | 轉換爲true的值 | 轉換爲false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | 空字符串('') |
Number | 任何非零數字(包換無窮大) | 0和NaN |
Object | 任何對象 | null |
Undefined | undefined |
2、Number類型spa
1.Number 對象屬性(部分)code
//Number 對象屬性(部分) alert(Number.MIN_VALUE);//最小值 alert(Number.MAX_VALUE);//最大值 alert(Number.POSITIVE_INFINITY);//Infinity(正無窮) alert(Number.NEGATIVE_INFINITY);//-Infinity(負無窮) //NaN //說明:能夠經過 Number.NaN獲得NaN值,任何與NaN進行運算的結果均爲NaN,NaN與自身不相等,且不與任何值相等。 alert(Number.NaN);//NaN alert(NaN+1);//NaN alert(NaN==NaN);//false
2.Number 判斷 (部分)對象
//Number 判斷 (部分) //isFinite()函數 若是沒有超出返回 true,若是已經超出返回 false var num=10; alert(isFinite(num));//true alert(isFinite(100e10000));//false //isNaN()函數 在接收到一個值的時候,會嘗試轉換爲數值,若是不能轉換爲數值,返回true,能轉換則返回false alert(isNaN(NaN));//true alert(isNaN(25));//false alert(isNaN('25'));//false alert(isNaN('12lee'));//true //說明他的轉換可能 用的是Number()強制轉換 alert(isNaN(true));//false //isNaN()也能夠適用於對象,在調用時,會先調用ValueOf()方法,而後肯定返回值是否能轉換成數值,若是 不能,則基於這個返回值再調用toString()方法,再測試返回值 /*var num2={ na:function(){ //return '123'; return 123 } }; //alert(isNaN(num2));//true//這個由於沒有調用因此返回true alert(isNaN(num2.na()))//false*/ var num3={ toString:function(){ return '123'; } }; alert(isNaN(num3));//false //說明:toString是一個比較特殊的屬性,在這裏會直接調用toString()方法,因此和第一個例子不同
3.Number 類型轉換 ci
有三種方法:Number()、parseInt()、parseFloat()字符串
(1)Number()string
//Number()函數是轉型函數 ,能夠用於任何數據類型的轉換,可是不精確 alert(Number(true));//1 Boolean類型: true爲1 false爲0 alert(Number(25));//25 Number類型:原值輸出 alert(Number(null));// 0 Null類型:返回0 alert(Number(undefined));//NaN Undefined類型:返回NaN alert(Number('123l'));//NaN string類型只要有一個非數字,無論在前仍是在後,都會返回NaN;若是是全是數字字符串則會按照十進制來轉換,前導(第一位)爲0,則去掉0;浮點小數爲直接轉成浮點小數,這兩點和下面的parseInt()和parseFloat()不同!!! alert(Number(num3));// 123 Object類型:會調用valueOf()方法,而後肯定返回值是否可以轉換爲數值,若是轉換的結果 是NaN,則基於這個結果再調用toString()方法,再測試返回值
(2)parseInt()it
//parseInt()整型轉型函數 主要是針對字符串的轉換 //若是字符串中第一位是數字 ,則會返回這個數字直到碰到非數字中止;若是第一位就是非數字,則返回 NaN;若是爲空,則返回 NaN alert(parseInt(''));//NaN 空返回NaN 和Number()函數不一樣,該函數返回0 //parseInt(string, radix)有兩個參數,第一個爲字符串,第二個是進制(2,8,10,16) //說一個比較 特殊的,若是字符串前導爲0,則後面要加進制,不然會默認爲8進制,例以下; alert(parseInt('070'));//70 alert(parseInt('070',8));//56 var iNum1 = parseInt("010"); //返回 8 var iNum2 = parseInt("010", 8); //返回 8 var iNum3 = parseInt("010", 10); //返回 10 alert(iNum1+','+iNum2+','+iNum3);//10,8,10 //這是從w3c上看到的,多是兼容性問題吧,在谷歌中,默認都是十進制;在IE中,會輸出 8,8,10 因此爲了兼容性,前導爲0的後面要加上進制
(3)parseFloat()io
//parseFloat()用於浮點數值轉換。從第一位解析到非浮點數值的位置,但只認一個小數點,且不認16進制 alert(parseFloat('123c'));//123 遇到非數字中止,開始若是非數字 則返回 NaN alert(parseFloat('0XA'));//0 不認識16進制 alert(parseInt('0xA'));//10 alert(parseFloat('123.4.5'));//123.4 //只認一位小數點 alert(parseFloat('0123.4000.1'));//123.4 //去掉先後導 alert(parseFloat('1.234e7'));//12340000 //把科學計數法轉成普通 數值 alert(parseInt('1.234e7'));//1 //遵循自身的規則 遇到非數字中止
3、String類型
//String類型 toString()方法、String()方法 //字符串類型在轉換時,有兩個比較 特殊 的注意一下:null和undefined var str1=null; var str2=undefined; alert(typeof str1);//object alert(typeof str2);//undefined alert(String(str1));//null alert(typeof String(str1));//string //alert(str1.toString());//報錯了呀 Cannot read property 'toString' of null //alert(toString(str1));//[object Undefined];對象未定義 //alert(str2.toString());//Cannot read property 'toString' of undefined //alert(toString(str2));//[object Undefined];對象未定義 //以上說明:純粹的Null類型和Undefined類型是沒有toString()方法的。但若是值有toString()方法,則調用該方法並返回相應的結果 ,若是 是null或者undefined,則返回「null」或者"undefined"。不過這個目前我也不太清楚,試試對象吧 var box1={ toString:function(){ return null; } } alert(box1);//null