你不知道的 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(..) 主要处理特殊的相等比较