# ❓下面代码中 a 在什么情况下会打印 1?

var a = ?;
if(a == 1 && a == 2 && a == 3){
 	console.log(1);
}
1
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
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
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