亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript中如何讓“a==1&&a==2&&a==3”成立

發布時間:2023-03-14 09:37:12 來源:億速云 閱讀:126 作者:iii 欄目:web開發

這篇文章主要講解了“javascript中如何讓“a==1&&a==2&&a==3”成立”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“javascript中如何讓“a==1&&a==2&&a==3”成立”吧!

一、問題解析

if (a == 1 && a == 2 && a == 3) {
  console.log('Win')
}

如何讓if里面的代碼執行,成功在控制臺打印出Win?

看到題目的第一眼,我是蒙蔽的.怎么可能會有如此矛盾的情況發生呢?就相當于一個人怎么可能即是小孩,又是成年人,還是老年人呢?

冷靜下來,發現一些端倪。

它沒說讓a同時等于1 2 3。

而且js是單線程運行的。 即使它們寫在了一行,那也是從左到右執行的. 所以它們從時空上面就不是同一時期的東西。

既然不是同一時期的東西,那么一個人當然可以是可以成為小孩子,之后成為過成年人,然后變成老年人了。

回到題目,那么我想要讓這個條件成立,就需要獲取一次a的同時,讓它自增1。

二、解決辦法

2.1 toString

第一種方法,利用判斷過程中的[隱式轉換]的toString方法。在我的另外一篇為什么[] == ![]結果為true?中詳細闡述過。

const a = {
  _a: 0,
  toString: function() {
    return ++a._a
  }
}

運行一次,就給_a加1,然后返回.

因為toString是Object.prototype上面默認的方法,所以這個辦法相當于把正常的隱式轉換中toString 方法給攔截了。

涉及原型和原型鏈的知識點

問題是可以解決了。

評論區的有掘友說讓 a = true 也可以解決的。確實很有誤導性。其實是混淆了隱式轉化的優先級。簡單來說,隱式轉化是由兩部分組成:轉化的規則 + 觸發轉化的條件if包著的里面整體觸發了Boolean()的轉化規則,==又字符串在右側觸發toString()的轉化規則。

回到這題,==的右邊是數字,JS運行線路是從左到右的。所以,這個時候觸發的是Number()的規則,把左側的true轉化為1之后,兩邊類型一致之后,那自然不會再觸發什么規則了,此時已經不構成隱式轉化。所以說1 == 1 && 1 == 2 && 1 == 3是不成立的。

現在記住了,也比面試過程中的時候再來記好

現在將題目簡單修改一下,將雙等變成三個等怎么辦?

大家都知道===的話是先判斷類型,再判斷值。這里的toString已經默認把對象轉化為字符串了.使用toStirng的話,結果就不成立了.

2.2 defineProperties

使用對象的數據攔截法:

Object.defineProperties(window, {
  _a: {
    value: 0,
    writable: true
  },
  a: {
    get: function() {
      return  ++_a
    }
  }
})

感謝各位的閱讀,以上就是“javascript中如何讓“a==1&&a==2&&a==3”成立”的內容了,經過本文的學習后,相信大家對javascript中如何讓“a==1&&a==2&&a==3”成立這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郎溪县| 西藏| 新河县| 韶关市| 上林县| 安福县| 新源县| 长沙市| 定州市| 怀远县| 蓝田县| 洪泽县| 天门市| 神木县| 西昌市| 桃园县| 富顺县| 固原市| 临泽县| 申扎县| 海门市| 保定市| 鄂尔多斯市| 禹城市| 西安市| 乌拉特中旗| 衢州市| 曲麻莱县| 保定市| 景泰县| 凌海市| 革吉县| 鹤岗市| 池州市| 翁源县| 赤峰市| 南漳县| 鄂托克旗| 余姚市| 子长县| 蓝山县|