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

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

作者: PingerL | 来源:发表于2019-07-26 18:58 被阅读0次

    一、JS中关于if(xxx)的判断:

    if (xxx) {
    }
    

    js是如何处理的?我们先来看几道测试题

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

    以上题目代码的输出结果为:

    • 题目1的输出结果:hello
    • 题目2的输出结果:
    • 题目3的输出结果:blank
    • 题目4的输出结果: array
    • 题目5的输出结果:0.00
      即1,3,4,5条件语句中都为 true,2为 false
    类型 结果
    Undefined false
    Null false
    Boolean 直接判断
    Number +0, −0, 或者 NaN 为 false, 其他为 true
    String 空字符串为 false,其他都为 true
    Object true

    总结:在if条件语句中,任何一个值,只要它不是 undefined、null、 0、NaN或空字符串(""),那么无论是任何对象,即使是值为假的Boolean对象(P.S 不要将原始布尔值的truefalse与Boolean对象的真或假混淆),在条件语句中都为真。

    二、JS中关于a == b 的判断:

    console.log("" == 0 ) //  true
    console.log(" " == 0 ) //  true
    console.log("" == true )  //   false
    console.log("" == false ) //  true
    console.log(" " == true  )//  false
    console.log("" == 0 ) // true
    console.log(" " == 0 ) //true
    console.log("" == true ) //false
    console.log("" == false ) //true
    console.log(" " == true ) //false
    console.log(" " == false) //true
    console.log(!" " == true) //false
    console.log(!" " == false) //true
    console.log("hello" == true) //false
    console.log("hello" == false) //false
    console.log("0" == true) //false
    console.log("0" == false) //true
    console.log("00" == false) //true
    console.log("0.00" == false) //true
    console.log(undefined == null) //true
    console.log([0] == 0) //true
    var obj = {
      a: 0, 
      valueOf: function(){return 1} 
    } 
    console.log(obj == "[object Object]") //false
    console.log(obj == 1) //true
    console.log(obj == true) //true
    

    从以上结果可总结出:

    x y 结果
    null undefined true
    Number String x == toNumber(y)
    Boolean (any) toNumber(x) == y
    Object String or Number ttoPrimitive(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方法获取结果。
    总结:当比较运算涉及类型转换时, JavaScript 会按以下规则对字符串,数字,布尔或对象类型的操作数进行操作:
    1、当比较数字和字符串时,字符串会转换成数字值。 JavaScript 尝试将数字字面量转换为数字类型的值。 首先, 一个数学上的值会从数字字面量中衍生出来,然后这个值将被转为一个最接近的Number类型的值。
    2、如果其中一个操作数为布尔类型,那么布尔操作数如果为true,那么会转换为1,如果为false,会转换为整数0,即0。
    3、如果一个对象与数字或字符串相比较,JavaScript会尝试返回对象的默认值。操作符会尝试通过方法valueOf和toString将对象转换为其原始值(一个字符串或数字类型的值)。如果尝试转换失败,会产生一个运行时错误。
    P.S、注意:当且仅当与原始值比较时,对象会被转换为原始值。当两个操作数均为对象时,它们作为对象进行比较,仅当它们引用相同对象时返回true

    小贴士:对于判断a == b首先先往数字方面靠,字符串中空字符串为false,文字字符串为NaN(NaN和任何值不相等,包括其自身),其余的字符串为true

    相关文章

      网友评论

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

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