人妻精品在线观看一区二区三区,蜜臀av精品一区二区三区网站,中文一区二区三区亚洲欧美,熟女人妇精品一区二区,人妻av在线观看视频,欧美日韩国产三级精品网站,黄色免费网站直接进入,超碰公开福利正在播放,国产毛片乡下农村妇女毛片

面試題:怎么讓“a==1&&a==2&&a==3”成立?-即時焦點(diǎn)

來源:php中文網(wǎng) | 2023-03-13 19:58:55 |

本篇文章給大家分享一個經(jīng)典面試題,看看怎么讓“a==1&&a==2&&a==3”成立?通過這個面試題,了解到包含的知識點(diǎn),希望對大家有所幫助!


(資料圖片僅供參考)

一、問題解析

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

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

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

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

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

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

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

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

二、解決辦法

2.1 toString

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

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

運(yùn)行一次,就給_a加1,然后返回.

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

問題是可以解決了。

評論區(qū)的有掘友說讓 a = true 也可以解決的。確實(shí)很有誤導(dǎo)性。其實(shí)是混淆了隱式轉(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運(yùn)行線路是從左到右的。所以,這個時候觸發(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    }  }})

涉及到對象的訪問器相關(guān)內(nèi)容

不知道是否讓你想起Vue中的watch或者computed的指令呢?

三、總結(jié)

是否會做這道面試題沒有任何意義。但是能夠了解到這個面試題包含的知識點(diǎn)就很有意思。

從隱式類型轉(zhuǎn)換到原型和原型鏈,最后到對象的訪問權(quán)屬性。如果要繼續(xù)延伸的話,Vue的雙向綁定的實(shí)現(xiàn)原理,class中static的實(shí)現(xiàn)等等。

這些就是為什么說,要構(gòu)建前端的知識體系,能夠從一個知識點(diǎn)延伸到相關(guān)的其他知識點(diǎn)。

【推薦學(xué)習(xí):javascript高級教程】

以上就是面試題:怎么讓“a==1&&a==2&&a==3”成立?的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

關(guān)鍵詞: