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 说明在数组对比的时候,其实对比的是引用的地址