美文网首页Web前端之路
17.08 ==,===,与object.is()的区别

17.08 ==,===,与object.is()的区别

作者: 海野夏桑 | 来源:发表于2017-08-22 15:40 被阅读15次

    1.先说说 ==

    这个我们都知道,我一般念做等等于,是个比较运算符;当两边值类型不相同的时候,会进行类型转换,再进行比较,看实例:

    var a = 10;
    var b = 10;
    a == b  //true
    '10' == 10  //ture
    -------------------------------------------------------------------------------------------------------
    1 == true  //true
    '1' == true  //true
    -------------------------------------------------------------------------------------------------------
    +0 ==  -0  //true
    '0' == 0  //true
    0 == false  //true
    " " == false  //true
    " " == 0  //true
    -------------------------------------------------------------------------------------------------------
    [1, 2] == '1, 2'  //true
    new string('qwert') == 'qwert'  //true
    -------------------------------------------------------------------------------------------------------
    undefined == undefined  //true
    null ==null  //true
    null == undefined  //true
    false == false  //true
    ture == true  //true
    -------------------------------------------------------------------------------------------------------
    null == false  //false
    undefined == false  //false
    NaN == fasle  //false
    NaN ==NaN  //false
    -------------------------------------------------------------------------------------------------------
    {fun: 'aaa'} == {fun: 'aaa'}  //false
    

    2.再来看看 ===

    这是个严格版的等于,要求 类型相同值相同,才能是true。可以简单地理解为等号两边必须完全一样,就好像复制过去一样,但有例外:

    +0 === -0  //true
    

    两边不完全一样,但它是true。

    NaN === NaN  //false
    

    两边完全一样,但它是false,NaN连自己都不认识自己。。。
    还有要注意的一点是,如果两个值都引用同一个对象或函数,那么相等(即两个对象的物理地址也必须保持一致);否则不相等

    3.最后看看object.is()

    理解了上面的 ===,这个也就好理解了,基本和 === 一样,除了两处不同:
    1.+0不等于-0。
    2.NaN等于自身。

    object.is(+0, -0)  //false
    object.is(NaN, NaN)  //true
    

    这里面NaN能够认识自己了呢。

    相关文章

      网友评论

        本文标题:17.08 ==,===,与object.is()的区别

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