if (a == 1 && a == 2 & a == 3) { console.log(1); }
在什麼狀況下會輸出1?javascript
在判斷雙等於號的時會設計到類型轉換問題,若是等號兩邊的數值類型不同能夠嘗試將他們轉化成一個類型。對象類型在使用雙等號時,會涉及到隱式轉換,在執行a==1時首先會調用Valueof方法進行判斷,不行則繼續調用toString(),而後再把toString返回的字符串轉化爲數字類型繼續和a做比較。使用 == 號時ValueOf方法的優先級會比較高,而且每使用一次 == 號都會進行一次toSrting的方法判斷。這是將a爲對象時的解決方法。還能夠使用Object的defineProperty方法,首先將a聲明爲全局變量,那麼此時a爲window中的屬性,使用此方法能夠進行監聽a,也可解決此題目。java
使用對象屬性的valueOf方法,當進行比較一次後就將a進行增長設計
var a = { i: 1, valueOf: () => { return a.i++ } }
使用對象屬性的toString()方法,當進行比較一次後就將a進行增長code
var a = { i: 1, toString:() =>{ return a.i++ } }
使用Object.defineProperty方法監聽window對象中的a屬性,當獲取a時會調用get方法對象
var a = 0 Object.defineProperty(window,"a",{ get(){ return ++a } })
有幫助的話就點個贊吧~ip