「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
一道有趣的小題目,希望給大家帶來幫助。
愛遊戲,愛編程,用雙手成就自己的夢想。記得關注編程殿堂。