对NaN和+0,-0的判断
1. 严格相等相等性判断如下:(A === B) 不会进行隐式类型转化
2. 非严格相等条件下:(A == B) +0 和 -0 相等, NaN不和任何值相等包括本身
相等性判断表如图所示:
相等性转化规则:
案例:
判断 if (a == 1 && a == 2 && a == 3) { console.log(true) } ? 如何打印输出true
// 解法一:
var a = {
n: 0,
valueOf () {
return ++this.n;
}
}
// 解法二:
var a = {
n: 0,
toString () {
return ++this.n
}
}
console.log(a == 1 && a == 2 && a == 3);
如果进行valueOf 和 toString 方法同时存在的时候,隐式转化走valueOf
var a = {
valueOf () {
return 2;
},
toString () {
return 5;
}
}
console.log(a == 2, a == 5); // log: ture false
判断 if (a === 1 && a === 2 && a === 3) { console.log(true) } ? 答应输出true
var _a = 1;
Object.defineProperty(window, 'a', {
get () {
return _a++;
},
set () {}
})
console.log( a === 1 && a === 2 && a === 3); // log: true
判断 if (obj.a === 1 && obj.a === 2 && obj.a === 3) { console.log(true) }
// 利用对象上的 get 关键字
var obj = {
_a: 1,
get a () {
return this._a++;
}
}
console.log(obj.a === 1 && obj.a === 2 && obj.a === 3); // log: true