亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

可以(a == 1 && a == 2 && a == 3)評估為真嗎?

可以(a == 1 && a == 2 && a == 3)評估為真嗎?

元芳怎么了 2019-07-25 10:39:20
可以(a == 1 && a == 2 && a == 3)評估為真嗎?是否有可能在JavaScript中(a== 1 && a ==2 && a==3)進行評估true?這是一家大型科技公司提出的面試問題。它發生在兩周前,但我仍在努力尋找答案。我知道我們從來沒有在日常工作中寫過這樣的代碼,但我很好奇。
查看完整描述

3 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

如果你利用了它的==工作方式,你可以簡單地創建一個帶有自定義toString(或valueOf)函數的對象,該函數可以在每次使用時更改它返回的內容,使其滿足所有三個條件。

const a = {
  i: 1,
  toString: function () {
    return a.i++;
  }}if(a == 1 && a == 2 && a == 3) {
  console.log('Hello World!');}

這種方法的原因是由于使用了松散的等式運算符。當使用松散相等時,如果其中一個操作數與另一個操作數的類型不同,則引擎將嘗試將一個操作數轉換為另一個操作數。如果左邊是一個對象,右邊是一個數字,它會嘗試通過首先調用valueOf它來將對象轉換為數字,如果它是可調用的,如果失敗,它將調用toString。我toString在這種情況下使用的僅僅是因為它是我想到的,valueOf會更有意義。如果我改為返回一個字符串toString,那么引擎會嘗試將字符串轉換為一個數字,給出相同的最終結果,但路徑稍長。


查看完整回答
反對 回復 2019-07-25
?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

我無法抗拒 - 其他答案無疑是正確的,但你真的無法超越以下代碼:

var a? = 1;var a = 2;var ?a = 3;if(a?==1 && a== 2 &&?a==3) {
    console.log("Why hello there!")}

請注意if語句中的奇怪間距(我從您的問題中復制)。它是半角度Hangul(對于那些不熟悉的人來說是朝鮮語),它是一個Unicode空格字符,ECMA腳本不將其解釋為空格字符 - 這意味著它是標識符的有效字符。因此,有三個完全不同的變量,一個是在a之后的韓文,一個是之前的,另一個只是一個。_為了便于閱讀,替換空格,相同的代碼如下所示:

var a_ = 1;var a = 2;var _a = 3;if(a_==1 && a== 2 &&_a==3) {
    console.log("Why hello there!")}

查看Mathias的變量名稱驗證器上的驗證。如果這個奇怪的間距實際上包含在他們的問題中,我確信這是這種答案的暗示。

不要這樣做。認真。

編輯:我注意到(盡管不允許啟動變量)零變寬連接器零寬度非連接字符也允許在變量名中 - 請參閱使用零寬度字符混淆JavaScript - 優點和缺點?

這將如下所示:

var a= 1;var a?= 2; //one zero-width charactervar a??= 3; //two zero-width characters (or you can use the other one)if(a==1&&a?==2&&a??==3) {
    console.log("Why hello there!")}


查看完整回答
反對 回復 2019-07-25
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

有可能的!

var i = 0;with({
  get a() {
    return ++i;
  }}) {
  if (a == 1 && a == 2 && a == 3)
    console.log("wohoo");}

這在with語句中使用getter 來a評估三個不同的值。

...這仍然不意味著應該在實際代碼中使用...

更糟糕的是,這個技巧也適用于===。

 var i = 0;

  with({
    get a() {
      return ++i;
    }
  }) {
    if (a !== a)
      console.log("yep, this is printed.");
  }


查看完整回答
反對 回復 2019-07-25
  • 3 回答
  • 0 關注
  • 614 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號