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

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

作者: __jy | 来源:发表于2019-02-08 15:23 被阅读0次

    1、if的判断

    JS的if语句会先对括号内的表达式求值,然后将表达式的结果转换为boolean类型再做判断。

    • 对于括号里的表达式,会被强制转换为布尔类型
    if(xxx){
    }
    
    原理
    类型 结果
    Undefined false
    Null false
    Boolean 直接判断
    Number +0, −0, 或者 NaN 为 false, 其他为 true
    String 空字符串为 false,其他都为 true
    Object true
    结果
    • 1,3,4,5为 true
    • 2 为 false
    举例
    // 题目1:
    /* 字符串 */
    if ("hello") {
      console.log("true");
    } // true
    
    if ("") {
      console.log("true");
    } // true
    
    if (" ") {
      console.log("true");
    } // true
    
    if ("0.00") {
      console.log("true");
    } // true
    
    /* 数值 */
    if (0.00) {
      console.log("true");
    } // false
    
    /* 对象 */
    if ({}) {
      console.log("true");
    } // true
    
    if ([]) {
      console.log("true");
    } // true
    

    2、== 的判断

    JavaScript中有两种相等运算符,==和===
    当两个操作数的类型相同时,==和===没有什么区别,
    当两个操作数的类型不同时,===会直接返回false,而==会先转换操作数的类型,再比较它们是否相等。

    如果两个值类型相同,则执行严格相等的运算
    如果两个值的类型不同
    如果一个是null,一个是undefined,那么相等
    如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
    如果一个值是true/false则将其转为1/0比较
    如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
    其它就不相等了

    null==undefined;
    NaN==NaN
    "1"==true

    解密
    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
    类型 结果
    Undefined NaN
    Null 0
    Boolean ture -> 1, false -> 0
    String “abc” -> NaN, “123” -> 123
    toPrimitive

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

    举例
    "" == 0  //true  空字符转为数值是0
    " " == 0  //true
    "" == true  //false
    "" == false  //true
    " " == true  //false
    
    !" " == true  //false
    !" " == false  //true
    "hello" == true  //false
    "hello" == false //false
    "0" == true  //false
    "0" == false  //true
    "00" == false  //true
    "0.00" == false  //true
    
    undefined == null  //true
    {} == true  // false
    [] == true  //false
    var obj = { 
      a: 0, 
      valueOf: function(){return 1} 
    } 
    obj == "[object Object]"  //false  对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结
    果
    obj == 1  //true
    obj == true  //true
    

    相关文章

      网友评论

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

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