关于if(xx)与a==b的判断
简单介绍下if(xx)和a==b的相关判断
if(xx)的判断
1.if(number)
当if语句里面除了0和NaN之外,其他值都为true
if(a){
console.log('true')
}//true
a = 0
if(a){
console.log('true')
}//false
a = NaN
if(a){
console.log('true')
}//false
2.if(string)
除了空字符串为false,其余为true
if(''){
console.log('true')
}//false
if(' '){
console.log('true')
}//true
if('0'){
console.log('true')
}//true
3.if(boolean)
当出现布尔值时,直接判断
4.if(object)
当出现object时,都为true
console.log('true')
}//true
function f(){
var b = 1 + 2;
return b;
}
if(f()){
console.log('true')
}//true
5.if(undefined)
当if语句内为underfined时,为false
if(undefined){
console.log('true')
}//false
6.if(null)
当if语句内为null时,为false
if(null){
console.log('true')
}//false
a==b的判断
对于相同类型的a、b相等判断直接看数值就行,接下来主要讨论不同数据类型之间的a、b之间进行“==”运算时的判断
1.string==number
结果将string转化为number再进行判断:toNumber(a) == b,当a无法转换为number时判断为false
"" == 0 //true
" " == 0 //true
"hello" == 1 //false
"2" ==2 //true
2.boolean==(any)
boolean在运算时会转换为数值,true为1,false为0.其中boolean与undefined或者null做相等运算时均为false
"" == true //false
" " == false //true
"hello" == true //false
undefined == false //false
undefined == true //false
null == false //false
null == true //false
3.object==number/string
object会试图使用valueOf和toString转换后进行比较
var obj ={
a: 0;
valueOf: function(){return 1}
}
obj == 1 //true
[] == 0 //true
[2] == 2 //true
4.null和undefined的比较
与number、string和boolean类型相比较均为false,null和undefined之间相互比较为true
undefined == undefined //true
null == null //true
null == undefined //true
5.toNumber转换规则
- undefined 转换为为 NaN
- boolean转换为 true:1, false:0
- string 转换为 "abc":NaN,"123":123
总结:
做相等运算时,一般倾向于将不同的数据类型都转化为数值,或是转化为相同的数据类型.
- 如果两个值类型相同,则执行严格相等的运算
- 如果两个值的类型不同
- 如果一个是null,一个是undefined,那么相等
- 如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
- 如果一个值是true/false则将其转为1/0比较
- 如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
- 其它就不相等了