从 (a==1&&a==2&&a==3) 成立中看javascript的隐式类型转换

下面代码中 a 在什么情况下会打印 1var a = ?;
if(a == 1 && a == 2 && a == 3){
     console.log(1);
}

这个题目考察==的隐式转换

  • 利用toString
let a = {
  i: 1,
  toString () {
    return a.i++
  }
}

if(a == 1 && a == 2 && a == 3) {
  console.log('1');
}
  • 利用valueOf
let a = {
  i: 1,
  valueOf () {
    return a.i++
  }
}

if(a == 1 && a == 2 && a == 3) {
  console.log('1');
}
  • 数组这个就有点妖了(数组的toString通常调用join)
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');
}
posted @ 2019-07-19 15:36  来亦何哀  阅读(180)  评论(0编辑  收藏  举报