js 真是门强 ke 大 pa 的语言。
const a = {
i: 1,
toString: function () {
return a.i++;
}
}
if(a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}
toString 可以修改为 valueOf,如果两个都写,只会调用 valueOf。
var a ᅠ = 1;
var a = 2;
var ᅠ a = 3;
if(a ᅠ==1 && a== 2 &&ᅠ a==3) {
console.log("Why hello there!")
}
这个感觉就莫名其妙的了。。。
a = [1,2,3];
a.join = a.shift;
console.log(a == 1 && a == 2 && a == 3);
这个其实原理和第一个一样,比较前先进行转换。
let a = {[Symbol.toPrimitive]: ((i) => () => ++i) (0)};
console.log(a == 1 && a == 2 && a == 3);
emmm... symbol 还没学。
这个问题真的是太可怕了,问出来估计真的没多少人能答得出来。
传送门: https://stackoverflow.com/questions/48270127/can-a-1-a-2-a-3-ever-evaluate-to-true#