一.顯式類型轉換 1.Number(mix) 把其他類型的數據轉換成數字類型的數據 2.parseInt(string,radix) 將字元串轉換成整型類型數字(不四捨五入)(截斷數字) 當參數string裡面既包括數字字元串又包括其他字元串的時候,它會將看到其他字元串就停止了,不會繼續轉換後面的數 ...
一.顯式類型轉換
1.Number(mix)-----把其他類型的數據轉換成數字類型的數據
//string類型- var num= Number('123'); console.log(typeof(num)+':'+num); // number:123 var num= Number('-123'); console.log(typeof(num)+':'+num); // number:-123 var num = Number('abc'); console.log(typeof(num)+':'+num); // number:NaN var num = Number('123abc'); console.log(typeof(num)+':'+num); // number:NaN //boolean類型 num = Number(true);//false為0 console.log(typeof(num)+':'+num); // number:1 //undefined類型 num = Number(undefined) console.log(typeof(num)+':'+num); // number:NaN //對象 num = Number(null); console.log(typeof(num)+':'+num); // number:0 num = Number([]);;//空數組 console.log(typeof(num)+':'+num); // number:0 num=Number({});//空對象 console.log(typeof(num)+':'+num); // number:NaN num = Number([1,2]);//非空數組 console.log(typeof(num)+':'+num); // number:NaN //註:如果參數是 Date 對象,Number() 返回從 1970 年 1 月 1 日至今的毫秒數。 var num = Number(new Date()); console.log(typeof(num)+':'+num); // number:...
2.parseInt(string,radix)---將字元串轉換成整型類型數字(不四捨五入)(截斷數字)
當參數string裡面既包括數字字元串又包括其他字元串的時候,它會將看到其他字元串就停止了,不會繼續轉換後面的數字型字元串了。
parseInt('123abc345') // 123 parseInt('abc123') // NaN parseInt('123') // 123 parseInt('abc') // NaN
//非字元串(非數字)轉換為NaN
parseInt(true) // NaN parseInt(null);//NaN parseInt(undefined)//NaN parseInt([]);//NaN parseInt({});//NaN
radix基底是可以選擇的參數,radix的範圍是(2-36);
但radix為空時,就是將第一個參數轉換為數字;
當radix不為空時,這個函數可以用來當做進位轉換,第二個參數的作用是將第一個參數的轉換為數字後並當成幾進位的數字轉換為十進位,第二個參數
var num = '13'; console.log(parseInt(num,16));//19,將十六進位的13轉換為10進位的數字 var num = '13fg'; console.log(parseInt(num,16));//319,將十六進位的13f轉換為10進位的數字 var num = '3'; console.log(parseInt(num,2));//NaN;將2進位的3轉換為10進位的數字
註:var num = 123.2353;console.log(num.toFixed(2));//123.24---保留兩位小數,四捨五入
3.parseFloat(mix)---這個方法和parseInt方法類似,是將字元串轉換成浮點類型的數字;
同樣是碰到第一個非數字型字元停止,但是由於浮點型數據有小數點,所以它會識別第一個小數點以及後面的數字,但是第二個小數點就無法識別了。
parseFloat('123.2.3') // 123.2 parseFloat('123.2abc') // 123.2 parseFloat('123.abc') // 123 parseFloat('123.234aa')//123.234'
4.toString(radix);這個方法和前面的都一點不同,它是對象上的方法,任何數據類型都可以使用,轉換成字元串類型。
同樣radix基底是可選參數,當為空的時候,僅僅代表將數據轉化成字元串。
var demo = 100; typeof demo.toString(); // string 100 把100轉換為數字串 //註意,不可以寫成100.toString(); .會被當成浮點數而導致報錯 typeof true.toString() // string true //undefiend和null沒有toString方法 var demo = undefined;//null也報錯 var num = demo.toString(); console.log(typeof(num)+':'+num);//報錯 //數組 var arr=[1,2,3]; arr.toString();//"1,2,3"; var arr = []; arr.toString();//""; //對象 var obj = {}; obj.toString();//"[object Object]" var obj = {name:'wang'}; obj.toString();//"[object Object]"
//擴展---判斷數據是數組還是對象的有效方法
var demo = {name:'wang'};//---[object Object]
//var demo = [1,2,3,4,5];---[object Array]
console.log(Object.prototype.toString.call(demo));
radix不為空;表示以十進位為基底,轉換為radix目標進位的數字型字元串
var demo = 10; demo.toString(16) // A問題:如何將一個二進位的數轉換為16進位
//先從二進位轉換到10進位,在轉換到16進位 var num = 10101010; var test = parseInt(num,2);//將num當成二進位轉換為10進位 var tar = test.toString(16);//將十進位的test轉換為16進位 console.log(tar);//aa
5.String(mix)---把任何類型轉換成字元串類型。
var demo = 100.23; console.log(String(demo));//string類型的 100.23 var demo = true; console.log(String(demo));//string類型的 true var demo = undefined; console.log(String(demo));//string類型的 undefined var demo = null; console.log(String(demo));//string類型的 null var demo = []; console.log(String(demo));//空字元串 var demo ={}; console.log(String(demo));//string類型的 [object Object]
6.Boolean---轉換為布爾值false或者true
0,undefined,null,''(空串),NaN---轉換為false,其他為true
Boolean(0); // false Boolean(undefined); // false Boolean(null); // false Boolean(''); // false Boolean(NaN); // false var demo; console.log(Boolean(demo));//false
Boolean({})//true Boolean([])//true
二.隱式類型轉換---內部隱式調用了顯式的方法
1.isNaN()----檢測數據是不是非數類型。
中間隱含了一個隱式轉換,它會先將你傳的參數調用一下Number方法之後,再看看結果是不是NaN,這個方法可以檢測NaN本身。
isNaN(NaN); // true isNaN('abc'); // true Number('abc')= NaN isNaN('123'); // false isNaN(null);//false Number(null) = 0 isNaN(undefined);//true Number(undefined) =NaN
2.++, -- , +,-(一元正負), -,*,/,%(二元)
運算之前,先把變數調用Number方法,轉換為數字,再運算
var a = '124'; var b = a++; console.log(typeof(b)+':'+b);//number:124
var a = +'abc'; //+或- console.log(a); //NaN var a= 'a' *1; //NaN var b = '123'*1; //123
3.+(二元操作符)當加號兩側有一個是字元串,就調用String方法,把兩個都變成字元串
var a = '1'+ 1; console.log(typeof(a)+':'+a);//string:11
4.&& ,|| ,!-----運算之前,先把表達式調用Boolean方法,轉換為布爾值,再運算
&&,||返回的結果還是本身表達式的結果。
var a = 'abc'; console.log(!a); // false var c='aa' && 22; console.log(c);//22
5.<,>,<=,>=----有數字進行比較的(不論在操作符左邊還是右邊),就會隱式轉換為數字
var a= 10 > '2'; console.log(typeof(a)+':'+a);//boolean:true var a= '10' > 2; console.log(typeof(a)+':'+a);//boolean:true var a= '10'>'2';//沒有類型轉換,比的是ASCII console.log(typeof(a)+':'+a);//boolean:false
6.== != (也有隱式轉換)
var a= '1'==1; console.log(typeof(a)+':'+a);//boolean:true var a= '1'== true; console.log(typeof(a)+':'+a);//boolean:true
註意:NaN==NaN//false,NaN是唯一一個不等於自己的
var a = 3>2>1;//先比較3>2--true;true>1--1>1--false console.log(a);//false
註意:
undefined ==0;//false undefined <0;//false undefined >0;//false undefined>=0;//false undefined<=0;//false null==0;//false null>0;//false null<0;//false null>=0;//true null<=0;//true null==undefined;//true
三.不發生類型轉換: ===,!==
'123' === 123; // false; true === 'true'; // false 1 !== '1'; // true 1 !== 1; // false