# ❓下面代码中 a 在什么情况下会打印 1?
var a = ?;
if(a == 1 && a == 2 && a == 3){
console.log(1);
}
1
2
3
4
2
3
4
== 会进行隐式类型转换 所以我们重写 toString | valueOf 方法就可以了
var a = {
i: 1,
toString() {
return a.i++
}
}
if (a == 1 && a == 2 && a == 3) {
console.log(1)
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
let a = {
i: 1,
valueOf() {
return a.i++
}
}
if (a == 1 && a == 2 && a == 3) {
console.log('1')
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
var value = 1
// 浏览器环境 window
// node 环境 global
Object.defineProperty(global, 'a', {
get: function() {
return (this.value = this.value ? (this.value += 1) : 1)
}
})
if (a == 1 && a == 2 && a == 3) {
console.log(1)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13