1. 程式人生 > >Can (a ==1 && a== 2 && a==3) ever evaluate to true?

Can (a ==1 && a== 2 && a==3) ever evaluate to true?

在 JavaScript 中 (a ==1 && a== 2 && a==3) 可能為 true 嗎?

這個問題是國外一位求職者最近在面試一家大型科技公司時遇到的一個問題。

他的回答是「不可能」,而面試方說「nothing is impossible」,然後就沒有然後了。

雖然在實際工作中可能沒人會寫這樣的程式碼,但題主還是放不下,苦思冥想了兩個禮拜,終於還是決定在 Stack Overflow 上尋求解答。

大家可以先自己想一想。

...

...

...

這裡給一個最高讚的答案:

自定義 toString(或者 valueOf)方法,每次呼叫改變一次返回值,從而滿足判斷條件。

const a = {
  i: 1,
  toString: function () {
    return a.i++;
  }
}

if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');
}

當使用 == 時,如果兩個引數的型別不一樣,那麼 JS 會嘗試將其中一個的型別轉換為和另一個相同。在這裡左邊物件,右邊數字的情況下,會首先嚐試呼叫 valueOf(如果可以呼叫的話)來將物件轉換為數字,如果失敗,再呼叫 toString。

其實,還有很多其他的實現,感興趣的可以點選連結看看。

比如一個很黑科技但更有趣的解法是:
var aᅠ = 1;
var a = 2;
var ᅠa = 3;
if(aᅠ==1 && a== 2 &&ᅠa==3) {
    console.log("Why hello there!")
}
此解法需要注意if裡面的格式哦~

作者:Hevin
連結:https://zhuanlan.zhihu.com/p/33029291
來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。