下面代码中 a 在什么情况下会打印 1? var 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'); }