if(a == 1 && a==2&a==3){
console.log('输出!!!');
}
看到这个,第一反应就是走不到if里面,正常情况下,没有一个变量能够同时等于1、2、3。
不过在前端的==符号两边是有着类型转换的,隐式转换是要运用toString方法,且按顺序1、2、3代表会有自增。所以我们可以声明一个obj,并重写它的toString方法。
var a = {
b:0,
toString(){
return ++this.b;
}
}
image.png
那如果说换成全等符号呢
if(a === 1 && a===2&a===3){
console.log('输出!!!');
}
全等符号明显是不能进行类型转换的,这时候就需要用到getter进行变量的拦截了实现思路和上面差不多也是要进行自增操作,toString方法换成了Object.defineProperty
var b = 0;
Object.defineProperty(window,'a',{
get(){
return ++b;
}
})
image.png
网友评论