一.if(XX)的判断
对于括号里的表达式,非布尔类型会被强制转换为布尔类型.
1.当if括号里面的表达式为Undefined时,为false;
if(undefined){
console.log("true"); //false 不输出
}
2.当if括号里面的表达式为null时,为false;
if(null){
console.log("true"); //false 不输出
}
3.当if括号里面的表达式为Boolean时,直接判断;
if (true){
console.log("true"); //true 输出true
}
if (false){
console.log("true"); //false 不输出
}
4.当if括号里面的表达式为字符串时, ""空字符串为false,其他为true;
if(""){
console.log("true"); //false 不输出
}
if(" "){
console.log("true"); //true 输出true
}
5.当if括号里面的表达式为Object时,为true;
if(Object){
console.log("true"); //true 输出true
}
6.当if括号里面的表达式为Number时, +0,-0,Nan为false,其他为true
if(+0){
console.log("true"); //false 不输出
}
if(1){
console.log("true"); //true 输出true
}
原理
类型 | 结果 |
---|---|
undefined | false |
null | false |
Boolean | 直接判断 |
string | ""(空字符串)为false,其他为true |
Object | true |
Number | +0,-0,Nan为false,其他为true |
二.aa==bb的判断
在javascript判断两个变量值是否相等,可以使用==(相等)操作符
== 简单判断2个变量值是否相等,变量类型不一致时,会做类型转换,即忽略变量的类型进行比较
1.String==Number --->(toNumber(String)==Number )
"" = 0 ; //true,因为“”转换为0
" " = 0 ; //true " "转换为0
"hello" == 1 //false ,因为"hello"转换为NaN
"hello" == 0 //false, 同理
2.Boolean==(any) --->(toNumber(Boolean)==(any))
1==true; //true,因为true转换为1
0==false;//true ,因为false转换为0
"0" == true //false
"0" == false //true
"00" == false //true
"0.00" == false //true
3.Object==String/Number---->(toPrimitive(Object))
对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结
果
{} == true // false
[] == true //false
var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == "[object Object]" //false
obj == 1 //true
obj == true //true
4.null==undefined,//true
toNumber
类型 | 结果 |
---|---|
Undefined | NaN |
null | 0 |
Boolean | ture->1,false->0 |
string | “abc” -> NaN, “123” -> 123 |
如果两个值类型相同,则执行严格相等的运算
如果两个值的类型不同
如果一个是null,一个是undefined,那么相等
如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
如果一个值是true/false则将其转为1/0比较
如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
其它就不相等了