奇怪的面试题

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

你可能感兴趣的:(奇怪的面试题)