# 如何实现 a==1&&a==2&&a==3 为 true?
因为==
具有隐式转换,将 2 个不同类型的数据比较会转换各种类型至一致,在比较值是否相等。
==
比较会转字符串再比较,调用 toString 方法。
var a = {
value: 0,
toString() {
console.log('toString', 222);
return ++a.value;
}
};
console.log(a == 1 && a == 2 && a == 3); //true
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 如何实现 a===1&&a===2&&a===3 为 true?
===
要求类型和值都一样,不调用 toString 方法,可以用 Object.defineProperty 定义 a,走 getter
var _a = 0;
Object.defineProperty(window, 'a', {
get() {
console.log('get');
return ++_a;
}
});
console.log(a === 1 && a === 2 && a === 3); //true
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
提示
此方法同样适用于上面的问题