关于if(xx)和 a==b的判断

一.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转换后比较
其它就不相等了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容