nothing is impossible
问题
在 JavaScript 中 (a ==1 && a== 2 && a==3) 可能为 true 吗?
解答一
1 2 3 4 5 6 7 8 9 10
| const a = { i: 1, toString: function () { return a.i++; } }
if(a == 1 && a == 2 && a == 3) { console.log('Hello World!'); }
|
当使用 == 时,如果两个参数的类型不一样,那么 JS 会尝试将其中一个的类型转换为和另一个相同。在这里左边对象,右边数字的情况下,会首先尝试调用 valueOf(如果可以调用的话)来将对象转换为数字,如果失败,再调用 toString。
解答二
1 2 3 4 5 6
| var aᅠ = 1; var a = 2; var ᅠa = 3; if(aᅠ==1 && a== 2 &&ᅠa==3) { console.log("Why hello there!") }
|
解答三
1 2 3 4 5 6 7 8 9 10
| var i = 0;
with({ get a() { return ++i; } }) { if (a == 1 && a == 2 && a == 3) console.log("wohoo"); }
|
解答四
1 2 3
| a = [1,2,3]; a.join = a.shift; console.log(a == 1 && a == 2 && a == 3);
|
https://stackoverflow.com/questions/48270127/can-a-1-a-2-a-3-ever-evaluate-to-true