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;
}
}