javascript之if (a == 1 && a == 2 & a == 3)判斷a的條件值

題目:

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

相關文章
相關標籤/搜索