从 (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');
}
好记性不如烂笔头,看到自己觉得应该记录的知识点,结合自己的理解进行记录,用于以后回顾。
原文地址:https://www.cnblogs.com/wangxi01/p/11213607.html