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

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

作者: 小废柴JH | 来源:发表于2018-05-21 20:23 被阅读0次

    if的判断

    if(xxx){
    }
    
    js 是如何处理的?
    

    原理

    类型 结果
    Undefined false
    Null false
    Boolean 直接判断
    Number +0, −0, 或者 NaN 为 false, 其他为 true
    String 空字符串为 false,其他都为 true
    Object true

    解密

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

    做几道测试题看一看

    if ("hello") {
        console.log("hello")
    } //hello
    
    if ("") {
        console.log('empty')
    } //无输出
    
    if (" ") {
        console.log('blank')
    } //blank
    
    if ([0]) {
        console.log('array')
    } //array
    
    if('0.00'){
      console.log('0.00')
    } //0.00
    

    == 的判断

    对于==的判断,js是怎么处理的?

    解密

    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方法获取结果

    看几个题目

    "" == 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
    undefined == null //true
    true == {} //false
    [] == true //false

    var obj = { 
      a: 0, 
      valueOf: function(){return 1} 
    } 
    obj == "[object Object]"  //false
    
    obj == 1  //true
    obj == true  //true
    

    相关文章

      网友评论

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

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