为什么有这样问题?==
会造成子类型的转换,===
区分不了 NaN === NaN
(返回false),+0 === -0
。
现在统一的做法是参照jquery做法。 统一的做法是全部用===
,除一种情况例外,即验证对象属性是否存在时,才用==
。
es6 直接添加了Object.is()方法。
console.log(Object.is(NaN,NaN)); //true
console.log(Object.is(+0,-0)); // false
es5 如何解决===
问题。
Object.defineProperty(Object,'is',{
value: function(x,y){
if(x === y) {
// +0 === -0, false
return x !== 0 || 1/x === x/y;
}
return x !== x && y!== y;
}
configurable: true,
enumerable: false,
writable: false
})