美文网首页Web前端之路JavaScript 进阶营
你应该在相等的时候用Object.is()

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

作者: ikonan | 来源:发表于2020-09-17 11:41 被阅读0次

==

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

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

console.log('0 == " "', 0 == ' '); // true
console.log('null == undefined', null == undefined); // true
console.log('[1] == true', [1] == true); // true

===

因此 JavaScript 中给我们提供了全等操作符 ===, 它比不全等操作符更加严格并且不会发生类型转换。但是用 === 来进行比较并不是最好的解决方案。你可能会得到:

 // NaN === NaN //false
 console.log('NaN === NaN', NaN === NaN); // false

Object.is()

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

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

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

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

相关文章

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

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

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

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

  • es6学习-扩展对象的功能性

    更好的判断是否相等 Object.is():方法判断两个值是否是相同的值,Object.is 不会做这种类型转换。...

  • 对象新增的一些方法

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

  • jest 断言

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

  • ES6-对象

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

  • 15- Object 扩展

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

  • 阮一峰ES6教程读书笔记(六)对象的新增方法

    1. Object.is() 在ES6之前我们总是通过相等运算符==或者严格相等运算符===去判断两个值是否相等,...

  • 对象的扩展

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

  • 对象的扩张

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

网友评论

    本文标题:你应该在相等的时候用Object.is()

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