js面試題:a==1&&a==2&&a=3的兩個思路

看到了一道面試題:a==1&&a==2&&a==3在什麼時候成立,查閱資料後總算明白了,記錄一下。

一.利用==中的隱式類型轉換

1.原理與思路

首先要了解==運算符中究竟發生了什麼。

js調用==進行比較時,不同與===,雙等號會觸發類型轉換,進行比較的事實上不是原始值,而是valueOf()的返回值,類型轉換可能會觸發兩個函數,分別是toString()與valueOf(),關於區別可參照https://www.jb51.net/article/102027.htm

在這裏調試後發現觸發了valueOf(),每進行一次比較就調用一次,我們可以做一些簡單代碼來測試是否正確。

//定義obj2,重寫方法
let obj2={
  arr:[1,2,3],
  toString:()=>{
    console.log("toString")
  },
  valueOf:()=>{
    console.log("valueOf")
  }
}

接着在控制檯輸入==來進行比較操作,查看結果。

的確是調用了valueOf(),所以我們可以在這裏做一些手腳。

 

2.JS實現

//定義obj3來完成操作
let obj3={
    i:1,
    valueOf:()=>{
        return obj3.i++
    }
}


二.利用definProperty的get方法

1.原理與思路

js調用對象屬性時時經過了get與set一層的,我們可以在這裏進行改動。

2.js實現

let a={
    temp:'',
    time:0
}
Object.defineProperty(a,"temp",{
    get:function(){
        return a.time++;
    }
})

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章