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

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

作者: 诺CIUM | 来源:发表于2018-10-30 12:21 被阅读13次

    一. if(xx)的判断

    JavaScript 遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean函数。
    1. 当if括号里面的表达式为Boolean时,直接判断
    if (true){
       console.log("true"); //true
    }
    if (false){
       console.log("true"); //false
    }
    
    1. 当if括号里面的表达式为Number时,分两种情况,当number为+0,-0,NaN的时候,为false;其他为true。
    if(0){
      console.log("true"); //false
    }
    if(NaN){
      console.log("true"); //false
    }
    if(1){
      console.log("true"); //true
    }
    
    1. 当if括号里面的表达式为String时,空字符串为false,其他为true;
    if(""){
      console.log("true"); //false
    }
    if("abc"){
      console.log("true"); //true
    }
    
    1. 当if括号里面的表达式为Undefined时,为false;
    if(Undefined){
      console.log("true"); //false
    }
    
    1. 当if括号里面的表达式为null时,为false;
    if(null){
      console.log("true"); //false
    }
    

    toBoolean

    类型 结果
    undefined false
    null false
    Boolean 直接判断
    string ""(空字符串)为false,其他为true
    Object true
    Number +0,-0,Nan为false,其他为true

    二. a==b的判断

    ==是比较两个值是否相等,相同类型直接比较,不同类型的话,看情况转换。
    1. String==Number --->toNumber(String)==Number
    "" = 0 ; //true,因为“”转换为0
    "  " = 0 ; //true
    "hello" == 1  //false  ,因为"hello"转换为NaN
    "hello" == 0 //false,同理
    
    1. 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
    
    1. 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
    null==undefined,//true
    

    ==知识点

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

    toNumber

    类型 结果
    Undefined NaN
    Null 0
    Boolean ture->1,false->0
    string (""-->0, " "-->0 )空字符串与空白字符串转换数值0,abc"->NaN,"123"->123

    相关文章

      网友评论

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

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