17.08 ==,===,与object.is()的区别
2017-08-22 本文已影响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能够认识自己了呢。