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

2021-11-17 18:14:02 浏览数 (1)

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

缺点:

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

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

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

代码语言:javascript复制
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;  
  }
}

0 人点赞