美文网首页
奇怪的面试题

奇怪的面试题

作者: 没_有_人 | 来源:发表于2021-03-30 15:31 被阅读0次
    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

    相关文章

      网友评论

          本文标题:奇怪的面试题

          本文链接:https://www.haomeiwen.com/subject/gqkghltx.html