JavaScript (a == 1 && a == 2 && a == 3) 可能爲 true 嗎?

簡評:你認爲這個問題是一個好的面試題嗎?

在 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
相關文章
相關標籤/搜索