a=?下面代码打印1

253 阅读1分钟
var a = ?;
if(a == 1 && a == 2 && a == 3){
 	conso.log(1);
}

答案:

    这个题目考察==的隐式转换
    
    // 利用toString
    let a = {
      i: 1,
      toString () {
        return a.i++
      }
    }
    
    if(a == 1 && a == 2 && a == 3) {
      console.log('1'); // 1
    } 
    
    // 利用valueOf
    let a = {
      i: 1,
      valueOf () {
        return a.i++
      }
    }
    
    if(a == 1 && a == 2 && a == 3) {
      console.log('1');
    }
    
    // 数组
    var a = [1,2,3];
    a.join = a.shift;
    if(a == 1 && a == 2 && a == 3) {
      console.log('1');
    }
    
    let a = [1,2,3];
    a.toString = a.shift;
    if( a == 1 && a == 2 && a == 3 ) {
    console.log(1);
    }
    
    // ES6的symbol
    let a = {[Symbol.toPrimitive]: ((i) => () => ++i) (0)};
    if(a == 1 && a == 2 && a == 3) {
      console.log('1');
    }
    
    // 利用with
    var i = 0;
    with({
      get a() {
        return ++i;
      }
    }) {
      if (a == 1 && a == 2 && a == 3)
        console.log("1");
    }
    
    // 利用window.get 方法
    var val = 0;
    Object.defineProperty(window, 'a', {
      get: function() {
        return ++val;
      }
    });
    if (a == 1 && a == 2 && a == 3) {
      console.log('1');
    }