美文网首页
关于if(xx)和 a==b的判断

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

作者: 此人长期不在线 | 来源:发表于2018-07-02 00:44 被阅读0次

    一、if(xx)的判断

    对于if括号里的表达式,会被强制转换为布尔类型

    类型 结果
    Boolean 直接判断
    Number +0, −0, 或者 NaN 为 false, 其他为 true
    String 空字符串为 false,其他都为 true
    Undefined false
    Null false
    Object true
    1. 当if括号里面的表达式为Boolean时,直接判断
    if (true){
       console.log("true"); //true
    }
    
    1. 当if括号里面的表达式为Number时,分两种情况,当number为+0,-0,NaN的时候,为false;其他为true。
    if (+0){
       console.log("haha"); //false
    }
    
    if (NaN){
       console.log("haha"); //false
    }
    
    if (1){
       console.log("haha"); //haha
    }
    
    1. 当if括号里面的表达式为String时,空字符串为false,其他为true;
    if ("") {
        console.log('empty'); //false
    }
    
    if (" ") {
        console.log('blank'); //blank
    }
    
    if('0.00'){
      console.log('0.00'); //0.00
    }
    
    1. 当if括号里面的表达式为Undefined时,为false;
    if(Undefined){
      console.log("true"); //false
    }
    
    1. 当if括号里面的表达式为null时,为false;
    if(null){
      console.log("true"); //false
    }
    
    1. 当if括号里面的表达式为Object时,为true;
    if ([0]) {
        console.log('array');  //array
    }
    

    二、a==b的判断

    在javascript判断两个变量值是否相等,可以使用==操作符 或者===操作符

    • ===是严格意义的相等,首先要求类型一样,然后在进行判断是否相等,如果两个类型不一样,直接返回false;在比较过程中不执行类型转换,需注意NaN和NaN不等。
    • ==是抽象意义上的相等,相同类型直接比较,如果为不同类型,会对比较对象的类型会执行转换,转换为同一类型后再进行值得比较。
    x y 结果
    null undefined true
    Number String x == toNumber(y)
    Boolean (any) toNumber(x) == y
    Object String or Number toPrimitive(x) == y
    otherwise otherwise false

    toNumber

    type Result
    Undefined NaN
    Null 0
    Boolean ture -> 1, false -> 0
    String “abc” -> NaN, “123” -> 123

    toPrimitive

    对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果

    1. 判断String==Number
    "" == 0    //true,因为“”转换为0
    " " == 0  //true,同理,会把空字符转换为0
    
    1. 判断String==Boolean
    "" == true   //false,只要有布尔类型,两边都会转换为数字,左边为0
    "" == false  //true,同理,左边为0,右边为0
    " " == true  //false,左边为0,右边为1
    !" " == true     //false,空白字符串取反,先把空字符串转化为布尔类型,为true,取反为false,而右边为true
    !" " == false     //true,同理,左边为false,右边为false
    "hello" == true     //false,true转化为数字是1,而"hello"转化为数字是NaN
    "hello" == false    //false,同理,"hello"转化为数字是NaN,false转化为数字是0
    "0" == true     //false,"0"转化为数字是0,true转化为数字是1
    "0" == false     //true,同理,"0"转化为数字是0,false转化为数字是0
    "00" == false    //true,同理,"00"转化为数字是0
    "0.00" == false    //true,同理,"0.00"转化为数字是0
    
    1. 判断undefined == null,Boolean==Object
    undefined == null   //true,比较特殊,undefined和null不转化为数字
    true == {}    //false,true转化为数字是1,{}是Object 类型
    [] == true  //false,空数组对应的是0
    
    1. Object==String/Number
    var obj = { 
      a: 0, 
      valueOf: function(){return 1}   //返回的值为1
    } 
    obj == "[object Object]"  //false
    obj == 1  //true,obj为1
    obj == true  //true,obj为1,true为1
    

    相关文章

      网友评论

          本文标题:关于if(xx)和 a==b的判断

          本文链接:https://www.haomeiwen.com/subject/esohuftx.html