1. 程式人生 > >js---資料型別轉換,typeof

js---資料型別轉換,typeof

js中有六種資料型別,包括五種基本資料型別(Number,String,Boolean,Undefined,Null),和一種複雜資料型別(Object)。

1.typeof------判斷後返回的都是字串型別("string"  "number" "undefined"  "object"  "function"  "boolean")

var a=1,b={},c=[1,2,3],d='123',e='abc',f=true,g='false',h=undefined;
function aa(){console.log(111);return 1}

console.log(
   typeof(a),//'number'
typeof(b),//'object'
typeof(c),//'object'
typeof(d),//'string'
typeof(e),//'string'
typeof(f),//'boolean'
typeof(g),//'string'
typeof(h),//'undefined'
typeof(aa),//'function'
typeof(aa()),//打印出了111,'number',函式未執行判斷的是函式型別,執行後,判斷的是函式返回值
typeof(null)//'object'  null比較特殊,由於最開始js是將null當做空物件佔位符導致判斷型別,null是object 
);
console.log(typeof(typeof(a))//a到aa的上述任一變數以兩個typeof輸出都是string,因為一次typeof返回的就是'XXX'

2.顯示轉換---Number() , parseInt() , parseFloat() , String() , toString() 

Number()的目的是為了把值轉換為數字,undefined轉不成數字最後是NaN

var a='abc',b='123',c='12a3',d='a123',e=undefined,f=null;
console.log(Number(a),Number(b),Number(c),Number(d),Number(e),Number(f));//NaN 123 NaN NaN NaN 0

parseInt()的目的是取第一個不是數字之前的數,再轉換為數字型別

var a='abc',b='123.12',c='12a3.2',d='a123',e=undefined,f=null;
console.log(parseInt(a),parseInt(b),parseInt(c),parseInt(d),parseInt(e),parseInt(f));//NaN 123 12 NaN NaN NaN

var num = parseInt(value,radix)---以radix為基準進位制的數(value)轉換為十進位制的數num

var num=101;
console.log(parseInt(num,2));//5   2的2次方+1  就是說num是2進位制下的數字,parseInt將num從二進位制轉換為十進位制

num.toString(radix)----num由十進位制轉換成radix進位制的數

var num=27;
console.log(num.toString(16));//1b   16進制中a是10,b是11...依次類推到15是f,16就進一位

例子:二進位制數1010轉換為16進位制---可以用十進位制過度

var num=1010;
var num1=parseInt(num,2);//二進位制數轉為十進位制  10
console.log(num1.toString(16));//十進位制數轉為16進位制  a
3.隱式轉換

isNaN(num)----會先Number(num)---再與NaN對比

num++  num--會先將Number(num),再運算處理(正負號,減乘除模都是先處理成Number型別)

數字和字串對比('a'>'123'),會優先轉換為Number,無法轉換的時候變成NaN,對比;如果對比字串和字串,會對比acs碼。

NaN不等於任何數,不小於任何數,不大於任何數

console.log('a'>'123');//true
console.log('a'>123,'a'<123,a==123);//false false false
console.log(NaN>123,NaN<123,NaN==123,NaN==NaN);//false false false

神奇的隱式轉換----!會將[]轉換為boolean型別的值即false,再!就是true;而等號等除了加號的運算子會優先轉換為Number型別,true轉為1,[]轉為數字是0.注意:[]==[]是false,[]==![]是true.

console.log([]==!![]);//false
Number([]);//0
Boolean([]);//true
var a=[];var b=a;
console.log(a==b,[]==[]);//true  false  說明在陣列對比的時候,其實對比的是引用的地址