前端面试 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和=== 有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章