js的变量类型判断和类型的转换
类型判断
- typeof:number、string、boolean、object(null,object,array)、undefined、function
类型转换
-
显示类型转换
Number(mix):mix转换为数字
Number(null) //结果为0
Number(true) //结果为1
Number(false) //结果为0
Number(undefined) //NAN
Number("123abc") //NAN
Number({}) //NAN
String(target):转为字符串
String(true) //"true"
String(null) //"null"
String({}) //"[object Object]"
String(undefined) //"undefined"
Boolean(target):转为布尔型
Boolean("45e") //true
Boolean(45) //true
Boolean({}) //true
Boolean([]) //true
Boolean(0) //false
Boolean("") //false
Boolean(null) //false
Boolean(undefined) //false
parseInt(target):将数字转为整数,
除了数字和以数字开始的字符串,其余都是NAN
举栗子:parseInt("100px")
parseFloat(target):将数字转为浮点数
除了数字和以数字开始的字符串,其余都是NAN
target.toString():target转为字符串
undefined和null不能用toString
parseInt(3,8) //3
parseInt(3,2) //NaN
parseInt(3,0) //3或者NaN 浏览器不同结果不同
- 隐形类型转换
隐形类型转换 :内部调用的是显示转换
isNaN():判断是否是NaN
isNaN("abc"),isNaN(undefined),isNaN({}) 结果为 true
调用isNaN()时,会将target先放在Number()里面转换,然后和NaN比对
++/--: 会将target先放在Number()里面转换,变成number类型
+/-(正负) : 会将target先放在Number()里面转换...
+ (加号):左右两边有字符串左右参数就转为字符串
*/% : 会将target先放在Number()里面转换...
&& || ! : 会将target先放在Boolean()里面转换
< > <= >= :左右两边有数字,Number(); 都是字符串比较ASCII码值
== != :会将target先放在Boolean()里面转换
var a = "abc";
console.log(typeof a) //string
a++
console.log(a) //NaN
console.log(typeof a) //number
/*
先Number("abc") 转换成number类型 ,结果是 NaN ; typeof NaN-->number
*/
//练习
var str = false + 1;
console.log(str);
var demo = false == 1;
console.log(demo);
if(typeof(a)&&-true + (+undefined) + ""){
console.log('基础')
}
if(11 + "11" * 2 == 33){
console.log('基础')
}
!!" " + !!"" - !!false||document.write('能否打印')
1.var str = false + 1 替换成 var str = Number( false ) + 1
Number(false )=0,所以结果为1
2.var demo = false == 1 替换成 var demo = Number( false ) == 1
进而为 var demo = 0 == 1
结果为false
3.typeof(a)&&-true + (+undefined) + ""
typeof(a) = undefined, -true=-Number(true)=-1,
undefined && -1 ==>Boolean('undefined') && Boolean(-1) ==> true && true ==> -1
(+undefined)=Number(undefined)=NaN
-1 + NaN = NaN
NaN + "" = "NaN"
4.
!!" " ==> 1
!!"" ==> 0
!!false||document.write("ff") ==> undefined
1+0-undefined ===> NaN