「a==1 && a==2 && a==3」為true?

請聽題,什麼情況下,js里的表達式

(a==1 && a==2 && a==3)為true?

如果你很清楚地知道它為true,並且知道具體的原因,那麼你可以退出去了,本篇文章對你沒有太大的幫助,如果你不是很理解,那麼就要好好閱讀了。

相信有不少小夥伴看到這個題,都會有這樣的想法,a==1的結果只有兩種情況,要麼是false,要麼是true,當三個相似的表達式用並且連在一起,只有三個全部為true時,整個表達式的結果才是true,但a怎麼會在等於1的同時又等於2呢?

話不多說,先看代碼

const a={

num:0,

valueOf:function(){

return this.num += 1

Advertisements

}

};

console.log(a==1 && a==2 && a==3);

結果是true。


這裡涉及到隱式轉換和valueOf()兩個重要的知識點,在兩種不同的類型遇到相等符號的時候,js會對其進行類型轉換,將操作數的類型轉化為類似的。

(a==1 && a==2 && a==3)中,js會把對象轉化為數字的類型,進行比較,當轉化一個object(對象)的時候,js會調用valueOf()方法,所以我們在上面的代碼中重寫valueOf()方法。

當進行轉換的時候,讓a裡面的num+1,判斷a==1時,num由0變成1,判斷a==2時,num繼續加1,變成2,同理,a==3也一樣,所以最後的結果是true。

Advertisements

一道有趣的小題目,希望給大家帶來幫助。

愛遊戲,愛編程,用雙手成就自己的夢想。記得關注編程殿堂。




Advertisements

你可能會喜歡