美文网首页前端路漫漫
[译]为什么你应该在相等比较中使用 Object.is()

[译]为什么你应该在相等比较中使用 Object.is()

作者: 背着灯笼 | 来源:发表于2017-04-06 21:40 被阅读8次

这是我在 JS Tips 上翻译的一篇文章,原文在官网上:为什么你应该在相等比较中使用 Object.is()

我们都知道 JavasSript 是弱类型的,并且当我们使用 '==' 作比较时,在一些情况下由于类型转换或者说“把两个操作数中的一个转换成另一个,然后在比较”,会出现意想不到的结果。

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。但是总的来说, 我认为它在实际应用中是一个很好的实践。

现在来看看这张图表的对比...

differences of operators in equality comparisons javascript

以上是原文的译文。
JS Tips 的风格就是简短,介绍一些小技巧,每篇的阅读时间要控制在 2 分钟以内。不够过瘾是吧?下面来点干货!附上 Object.is 的 polyfill:

Object.is = function(x, y) {
  if (x === y) {
    // +0, -0 情况的处理
    return x !== 0 || 1 / x === 1 / y;
  } else {
    // NaN
    return x !== x && y !== y;
  }
};


参考

相关文章

  • [译]为什么你应该在相等比较中使用 Object.is()

    这是我在 JS Tips 上翻译的一篇文章,原文在官网上:为什么你应该在相等比较中使用 Object.is() 我...

  • 相等比较总结

    相等性比较在日常开发中比较常见,这里我们主要介绍以下四种方式: === 严格相等 Object.is shallo...

  • jest 断言

    Jest 断言归纳 toBe - toBe 使用 Object.is 来测试是否完全相等.not - ...

  • 对象新增的一些方法

    Object.is() Object.is()用来比较两个值是否严格相等,与 "==="行为基本一致 不同之处有两...

  • ES6-对象

    Object.is()方法 在js中比较两个值时,你可能会用相等运算符==或者严格相等运算符 ===。为了避免在比...

  • 你应该在相等的时候用Object.is()

    == 我们都知道 JavasSript 是弱类型的,并且当我们使用 == 作比较时,在一些情况下由于类型转换或者说...

  • 15- Object 扩展

    1、Object.is() ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===...

  • 对象的扩展

    Object.is() ES5比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。它...

  • 对象的扩张

    Object.is() ES5比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。它...

  • es6 新语法

    ES6的Object.is()超越ES5 比较两个值是否相等 ES5 比较两个值是否相等,只有两个运算符:相等运算...

网友评论

    本文标题:[译]为什么你应该在相等比较中使用 Object.is()

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