Web前端之路

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能够认识自己了呢。

上一篇下一篇

猜你喜欢

热点阅读