[回归基础]JavaScript 等值比较 == ,=== 和 Object.is()

10年服务1亿前端开发工程师

我们都知道 JavaScript 是松散类型,并且在某些情况下,当使用 == 来做等值比较时,会给你意想不到的结果。这是因为使用 == 做等值比较时,JavaScript 会对2个比较的值进行隐式强制转换。

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

所以 JavaScript 还为我们提供了三个等号运算符 === ,它更严格,不强制转换比较值,但实用 === 比较有些时候也不是最好的解决方案:

NaN === NaN //false

有个好消息是,在 ES6 中有一个新的更好更准确的办法 Object.is(),它与 === 具有相同的功能,而且在一些特殊情况下表现良好:

Object.is(0 , ' '); //false
Object.is(null, undefined); //false
Object.is([1], true); //false
Object.is(NaN, NaN); //true

Mozilla 团队不认为 Object.is=== 更“严格”。他们说我们应该考虑这种方法来处理 NaN-0+0, 但总的来说,我认为 Object.is 在实际应用中是一个很好的做法。

下面这张图详细说明了 =====Object.is() 等值比价的异同:

<code/>==,<code>===</code> 和 <code>Object.is()</code> 等值比价的异同” /></p>
<p>参考:<a href=JavaScript 中的相等性判断

原文链接:http://www.jstips.co/en/javascript/why-you-should-use-Object.is()-in-equality-comparison/

赞(0) 打赏
未经允许不得转载:WEB前端开发 » [回归基础]JavaScript 等值比较 == ,=== 和 Object.is()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

前端开发相关广告投放 更专业 更精准

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏