成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

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

成都創(chuàng)新互聯(lián)是一家專業(yè)從事成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、網(wǎng)頁設(shè)計的品牌網(wǎng)絡(luò)公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計公司,作為專業(yè)的成都網(wǎng)站建設(shè)公司,成都創(chuàng)新互聯(lián)依托強大的技術(shù)實力、以及多年的網(wǎng)站運營經(jīng)驗,為您提供專業(yè)的成都網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計開發(fā)服務(wù)!

一、問題解析

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

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

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

冷靜下來,發(fā)現(xiàn)一些端倪。

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

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

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

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

二、解決辦法

2.1 toString

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

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

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

因為toString是Object.prototype上面默認(rèn)的方法,所以這個辦法相當(dāng)于把正常的隱式轉(zhuǎn)換中toString 方法給攔截了。

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

問題是可以解決了。

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

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

現(xiàn)在記住了,也比面試過程中的時候再來記好

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

大家都知道===的話是先判斷類型,再判斷值。這里的toString已經(jīng)默認(rèn)把對象轉(zhuǎn)化為字符串了.使用toStirng的話,結(jié)果就不成立了.

2.2 defineProperties

使用對象的數(shù)據(jù)攔截法:

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

感謝各位的閱讀,以上就是“javascript中如何讓“a==1&&a==2&&a==3”成立”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對javascript中如何讓“a==1&&a==2&&a==3”成立這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

本文名稱:javascript中如何讓“a==1&&a==2&&a==3”成立
網(wǎng)頁地址:http://jinyejixie.com/article44/iichhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、品牌網(wǎng)站制作搜索引擎優(yōu)化、標(biāo)簽優(yōu)化、品牌網(wǎng)站設(shè)計、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
黎城县| 遂平县| 苏尼特左旗| 潜江市| 嘉鱼县| 府谷县| 扶沟县| 北流市| 尼木县| 澄城县| 长阳| 闵行区| 南乐县| 克什克腾旗| 博罗县| 遵义县| 万州区| 遵义县| 建宁县| 财经| 财经| 宜宾县| 扬中市| 丁青县| 丹东市| 衡阳县| 班玛县| 高密市| 蓬溪县| 定边县| 东丽区| 东乌珠穆沁旗| 清苑县| 淮安市| 封丘县| 曲靖市| 临洮县| 河间市| 都安| 新巴尔虎左旗| 石屏县|