js ==和===以及Object.is区别

平时经常用到数据比较,会用到不少特殊值(NaN, '', null, undefined, 0, +0, -0,),这里整理一下数据比较方式(==和===以及Object.is)的区别。

==和===以及Object.is区别

JavasSript 是弱类型。==比较时,是值比较;===比较时,是类型和值比较;Object.is()比较时,跟===一样,但又有些区别。下面会一一介绍。

首先,==因为是值比较,故而在一些情况下会自动做类型转换再比较。也就是常说的js隐式转换。这里啰嗦一下,大致讲一下隐式转换。大多数情况下,大致遵守下面的规律:

js隐式转换.png

代码:

0 == ' ' //true
null == undefined //true
[1] == true //true

特例:

[] == false  //true
![] == false //true

其次,===比较时,就是类型和值的比较了。大多数情况下我们会用===而不是==,至少在es5的版本里是这样的。

''===0 //false
'0'===0 //false

ps:最特殊的就是NaN了,在ES5的版本里,无论是==还是===,不管谁更NaN比较都是false,包括跟它自己比较。

NaN==NaN //false
NaN=='' //false
NaN==0 //false
NaN==null //false
NaN==undefined //false

最后,ES6 中提供了新的 Object.is() 方法,它具有 === 的一些特点,而且更好、更精确,在一些特殊案例中表现的很好:

Object.is(0 , ' '); //false
Object.is(null, undefined); //false
Object.is([1], true); //false
Object.is(NaN, NaN); //true,特别是这个

ps: Object.is()方法不兼容ie。

总结,来看看这三者的对比表:


pCyqkLc.png

参考

  • js中的隐式转换
  • 为什么你应该在相等比较中使用 Object.is()
  • Object.is()

你可能感兴趣的:(js ==和===以及Object.is区别)