一道javascript面试题引发的思考

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