你不知道的 JavaScript 系列中( 14 ) - 特殊等式

NaN 和 -0 在相等比较时的表现有些特别。ES6 中新加入了一个工具方法 Object.is(..) 来判断两个值是否绝对相等,可以用来处理特殊情况
var a = 2/'foo';
var b = -3/0;

Object.is(a, NaN); // true
Object.is(b, -0); // true
Object.is(b, 0); // false

 

对于 ES6 之前的版本,Object.is(..) 有一个简单的 polyfill
if(!Object.is){
  Object.is = function(v1, v2) {
    // 判断是否是 -0
    if(v1 === 0 && v2 === 0) {
      return 1/v1 === 1/v2;
    }
    // 判断是否是 NaN
    if(v1 !== v2){
      return v2 !== v2;
    }
    // 其他情况
    return v1 === v2;
  }
}

能使用 == 和 === 时就尽量不要使用 Object.is(..),因为前者效率更高,更为通用,Object.is(..) 主要处理特殊的相等比较

 

posted @ 2020-05-17 09:58  wzndkj  阅读(169)  评论(0编辑  收藏  举报