美文网首页
关于条件判断和类型转换

关于条件判断和类型转换

作者: 生锈的螺丝钉阿门 | 来源:发表于2018-07-02 03:19 被阅读0次

    问题一:JavaScript的条件判断中,如果条件本身不是一个布尔值,代码可读性较差;但是完全是可以运行的。
    先看下下面的代码执行情况:

    if("hello"){ //条件是一个字符串
      console.log("hello"); //输出"hello"
    }
    if(""){  //条件是空字符串
      console.log("empty");//不会输出
    }
    if(" "){ //条件空格字符串
      console.log("blank"); //输出"blank"
    }
    

    解密:对于括号里面的表达式,会被强制转换成布尔类型。

    原理

    类型 结果
    undefined false
    null false
    number +0,-0,或者NaN为false,其他为true
    String 空字符串为false,其他都为true
    Object true

    问题二:类似"hello == true"的语句应该怎么计算值?
    JavaScript在执行比较语句的时候会做强制类型转换,先看看具体的执行情况:

    "" == 0  // true
    " " == 0  //true
    "" == true  //false
    "" == false  //true
    " " == true  //false
    !" " == true  //false
    !" " == false  //true
    "hello" == true  //false
    "hello" == false //true
    "0" == true  //false
    "0" == false  //true
    "00" == false  //true
    "0.00" == false  //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 true为1,false为0
    String "abc"为NaN,"123"为123

    toPrimitive
    对于Object类型,先尝试使用.valueOf方法获取结果。如果没有定义,在尝试调用.toString方法获取结果。
    总结:对于大小判断,JavaScript的处理方式是转换成两个数字进行比较,比较特殊的null==undefined //true;对于普通的类型的转换遵循上面的表格,对于对象的转换要调用valueOf或者toString方法。

    相关文章

      网友评论

          本文标题:关于条件判断和类型转换

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