简评:你认为这个问题是一个好的面试题吗?
在 JavaScript 中 (a ==1 && a== 2 && a==3) 可能为 true 吗?javascript
这个问题是国外一位求职者最近在面试一家大型科技公司时遇到的一个问题。java
他的回答是「不可能」,而面试方说「nothing is impossible」,而后就没有而后了。面试
虽然在实际工做中可能没人会写这样的代码,但题主仍是放不下,苦思冥想了两个礼拜,终于仍是决定在 Stack Overflow 上寻求解答。dom
你们能够先本身想想。lua
...code
...对象
...ip
这里给一个最高赞的答案:get
自定义 toString(或者 valueOf)方法,每次调用改变一次返回值,从而知足判断条件。it
const a = { i: 1, toString: function () { return a.i++; } } if(a == 1 && a == 2 && a == 3) { console.log('Hello World!'); }
当使用 == 时,若是两个参数的类型不同,那么 JS 会尝试将其中一个的类型转换为和另外一个相同。在这里左边对象,右边数字的状况下,会首先尝试调用 valueOf(若是能够调用的话)来将对象转换为数字,若是失败,再调用 toString。
其实,还有不少其余的实现,感兴趣的能够点击连接看看。
好比,我比较喜欢这个:
with({ get a() { return Math.floor(Math.random()*4); } }){ for(var i=0;i<1000;i++){ if (a == 1 && a == 2 && a == 3){ console.log("after "+(i+1)+" trials, it becomes true finally!!!"); break; } } }
问题: Can (a ==1 && a== 2 && a==3) ever evaluate to true? reddit
讨论: Javascript: Can (a ==1 && a== 2 && a==3) ever evaluate to true? r/programming