趣题记录

下面代码中 a 在什么情况下会打印 1?

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

  

方法一、使用toString()

let aa = {
  i: 1,
  toString () {
    console.log(`i`,aa.i)
    return aa.i++
  }
}

if(aa == 1 && aa == 2 && aa == 3) {
  console.log(1);
}

  

方法二、利用 valueOf()

let a = {
  i: 1,
  valueOf () {
    return a.i++
  }
}

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

  

方法三、利用数组的 join 和 shift

var a = [1,2,3];
a.join = 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);
}

  


方法五、Object.defineProperty

Object.defineProperty(window, 'a', {
    get: function() {
          return this.value = this.value ? (this.value += 1) : 1;
    }
});
if(a == 1 && a == 2 && a == 3) {
  console.log(1);
}

  

转载地址

原文地址:https://www.cnblogs.com/detanx/p/jsInterestingTopic1.html