1、valueOf
const a ={
current:1,
valueOf(){
return this.current++
}
}
if(a==1&&a==2&&a==3){
console.log(true)
}
打印结果为![](https://img-blog.csdnimg.cn/2762a99af8be4156ae44742d2a266e99.png)
原因是js在==时比较不同类型会调用类型转换也就是valueOf函数,在定义a时重写valueOf即可。
我们证实这一点可以随便写一个==案例,然后去Object的原型链上重写ValueOf函数,然后你会发现下面的双等都不会实现类型转换。
2、Object.defineProperty
let b = 1
Object.defineProperty(window,'a',{
get(){
return b++
}
})
if(a===1&&a===2&&a===3){
console.log(true)
}