• js == 和 === 判断原理


    逻辑等(==)
    在比较之前,==的两个操作符都会进行强制类型转换
    在转换不同的数据类型时,== 和 != 操作符遵循系列基本的原则
    1、如果有一个操作数时布尔值,则在比较相等性之前先将其转换为数值,即是调用Number()函数

    2、如果一个操作数是字符串,另一个数时数值,在比较相等性之前先将字符串转换为数值;同理底层是Number()函数

    3、如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型按照前面的规则进行比较

    以上是类型转换时遵循的原则,在转换成基本数据类型以后,会出现两边都是同个类型和不同类型的情况,在进行比较时又遵循以下的原则
    1、null 和 undefied 是相等的,这是js的规定,但是其实在底层,undedined的值是派生自null的,所以逻辑等时要返回true

    2、如果有一个操作数时NaN,则返回false(NaN不与任何操作符逻辑等或全等,包括NaN)

    3、如果两个操作符都是对象,则比较它们是不是同一个对象,则返回true,否则返回false

    根据上面的规则,再回过头来看看上面的那几个例子
    undefined == false

    根据转换规则1,调用Number()方法将其转换为数值类型

    根据上面结果,则转换为 NaN == 0 ,根据比较规则2,NaN不与任何操作符逻辑等,则返回false

    null == false

    Number(null) == Number(false) => 0  == 0  => true  //这是不行的

    可在控制台输出的是false啊?这只能说是js的特殊情况了,就像null == undefined一样,同样存在下列的特殊情况

    null == 0  //false

    null == false //false

    true == 2 //false 因为Number(true)返回的是1

    undefined == null 

    这个上面有提到了,情况比较规则1

    全等和不全等
    它是在两个操作数未经类型转换就相等的情况下返回true

    undefined === null

    这就容易解释了,undefined 和 null 都是不同类型,都是五种(ES6之后六种了,增加了Symbol)基本类型之一 ,所以为false

  • 相关阅读:
    TCP系列24—重传—14、F-RTO虚假重传探测
    TCP系列23—重传—13、RACK重传
    TCP系列22—重传—12、Forward Retransmit
    TCP系列21—重传—11、TLP
    TCP系列20—重传—10、早期重传(ER)
    TCP系列19—重传—9、thin stream下的重传
    TCP系列18—重传—8、FACK及SACK reneging下的重传
    TCP系列17—重传—7、SACK下的重传
    TCP系列16—重传—6、基础快速重传(Fast Retransmit)
    Centos 6.2 安装mysql5.5
  • 原文地址:https://www.cnblogs.com/nini123123/p/11240605.html
Copyright © 2020-2023  润新知