前端面试 JavaScript— Object.is和=== 有什么区别?

Posted aiguangyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端面试 JavaScript— Object.is和=== 有什么区别?相关的知识,希望对你有一定的参考价值。

ES5 比较两个值是否相等:相等运算符(==)和 严格相等运算符(===)。

缺点:

==:自动转换数据类型;

===:NaN不等于自身,以及+0等于-0。

ES6新的方法Object.is 来比较两个值严格相等,它与严格比较运算符(===)基本一致,不同之处只有两个:一是+0不等于-0,二是NaN等于自身。以下是源码实现:

function is(x, y){ 
  if (x === y) {
    // 运行到1/x === 1/y的时候x和y都为0,但是1/+0 = +Infinity, 1/-0 = -Infinity, 是不一样的
    return x!==0 || y!==0|| 1/x===1/y;  
  } else {
    // NaN === NaN 是false,这是不对的
    // 这里做一个拦截,x!==x,那么一定是 NaN, y同理两个都是NaN的时候返回true 
    return x!==x && y!==y;  
  }
}

以上是关于前端面试 JavaScript— Object.is和=== 有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

揭秘一线互联网企业 前端JavaScript高级面试

快速搞定前端初级JavaScript面试完整版

JavaScript 总结面试笔记 + 经典面试题 + 常用算法,帮你搞定前端 JavaScript 面试!

前端面试题 之 JavaScript

前端面试的面试经验

前端面试JavaScript插入排序