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

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

作者: ppamazing | 来源:发表于2018-11-22 14:24 被阅读0次

    if(XXX)的判断

    if (XXX) {}
    首先括号中的XXX会被强制转换为布尔类型,那究竟是true 还是 false 呢?有如下原理可以参考:

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

    我们先来看看如下几题:

      // 题目1:如下代码输出什么?
    if ("hello") {
        console.log("hello")
    }
    
    // 题目2:如下代码输出什么?
    if ("") {
        console.log('empty')
    }
    
    // 题目3:如下代码输出什么?
    if (" ") {
        console.log('blank')
    }
    // 题目4:如下代码输出什么?
    if ([0]) {
        console.log('array')
    }
    
    if('0.00'){
      console.log('0.00')
    }
    

    其中除了第二题的空字符串被转换为false, 其余全被是true。

    ==的判断

    == 先类型转换,再判断相等

    对不同类型的值有如下转换方法:
    • 原始数据类型会转换成数值类型再做比较,toNumber( )
    • 复杂类型调用 .valueOf 和 .toString方法转换为原始类型在做比较
    • undeifined和null与其他类型值比较时都为 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 方法对不同类型的值有如下结果
    type Result
    Undefined NaN
    Null 0
    Boolean ture -> 1, false -> 0
    String “abc” -> NaN, “123” -> 123
    • toPrimitive: 对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果。

    相关文章

      网友评论

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

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