奇怪的面试题

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容