为什么有这样问题?== 会造成子类型的转换,=== 区分不了 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
})