這是在面試題里看到的,原文是說如何讓a==1 && a==2 && a==3 為true?
以下是答案:
let a = [3, 2, 1]
a.__proto__.toString = function() {
return a.pop()
}
打印console.log(a==1 && a==2 && a==3)結(jié)果真為true;
朋友說==進(jìn)行隱式轉(zhuǎn)換,調(diào)用了toString方法,但是還不大清楚,所以請各位前輩指教
==判斷,一邊為Number類型,則會把兩邊都進(jìn)行一個數(shù)值轉(zhuǎn)換,數(shù)值轉(zhuǎn)換會先調(diào)用valueOf函數(shù),數(shù)組調(diào)用valueOf后返回的還是數(shù)組本身,就會再次調(diào)用toString函數(shù),而
a.__proto__.toString = function() {
return a.pop()
}
重寫了a的toString函數(shù),所以打印的語句可以看成
console.log((a.pop())==1 && (a.pop())==2 && (a.pop())==3)
//pop是從數(shù)組末尾彈出最后一個元素,修改原數(shù)組,并返回彈出的元素
//所以 (a.pop())==1 ==> 1==1 然后a變成[3,2],以此類推2,3也是如此我只是一個搬運(yùn)工
can-a-1-a-2-a-3-ever-evaluate-to-true
復(fù)制代碼并運(yùn)行 -.-
var a= 1;
var a?= 2;
var a??= 3;
if(a==1&&a?==2&&a??==3) {
console.log("Why hello there!")
}這個問題其實(shí)還是能考到對 Javascript 的基本理解的,而不是純粹為了玩。
其一,對于一個對象做比較有 valueOf/toString 的調(diào)用問題。
其二,JS 里一個變量背后經(jīng)常是一個 function。
自定義 toString(或者 valueOf)方法,每次調(diào)用改變一次返回值,從而滿足判斷條件。
const a = {
i: 1,
toString: function () {
return a.i++;
}
}
if(a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}
當(dāng)使用 == 時,如果兩個參數(shù)的類型不一樣,那么 JS 會嘗試將其中一個的類型轉(zhuǎn)換為和另一個相同。在這里左邊對象,右邊數(shù)字的情況下,會首先嘗試調(diào)用 valueOf(如果可以調(diào)用的話)來將對象轉(zhuǎn)換為數(shù)字,如果失敗,再調(diào)用 toString。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。