a等于什么if(a==1&&a==2&&a==3)为真?

70 阅读1分钟

题目: ?处如何填写,可输出1

    let a = ?
    if(a==1&&a==2&&a==3){
        console.log(1)
    }

答案:

    var a = {
        i:0,
        toString:function(){
            this.i++;
            return this.i
        }
    };
    if(a==1&&a==2&&a==3){
        console.log(1)
    }

详细理由:

  1. == 在比较时会默认进行数据类型转换,必然调用toString()方法,因此可通过重写a的toString方法来改变a的返回值(a为对象,对象原型默认有toString()方法,因此叫重写,不重写则会调用默认的toString()方法)
  2. 读取a的值(即return的值),第一次是1,第二次是2,第三次是3