最近在看Redux源碼,createStore
用於註冊一個全局store,其內部維護一個Listeren數組,存放state變化時全部的響應函數。
其中store.subscribe(listener)
用於註冊一個listener,同時返回一個unsubscribe
方法,用於註銷當前註冊的listener。
源碼中查詢listener索引時用到了Array.indexOf
方法,以下:
數組
一直用indexOf作值類型數組的查詢,故對於此種狀況記錄下函數
搜索Array對象的指定元素並返回該元素的索引prototype
var index = [].indexOf(item, start);
參數 | 描述 |
---|---|
item | 要查詢的元素 |
start | 開始檢索的索引 |
此外還能夠使用其靜態方法3d
Array.indexOf(array,item,start)
調用indexOf,若是查詢到結果,返回對應的索引;不然返回-1指針
indexOf能夠對一些簡單類型的數組進行檢索
code
但若是數組中元素是對象類型,是否也能夠用indexOf進行檢索呢?比較的依據是什麼呢?
對象
經過這組結果能夠看出,若使用indexOf檢索對象數組,比較的依據實際只進行指針相等斷定,而不會比較是否對象中各個值相等。
基於以上,咱們也能夠用這種方法檢索存在數組中的方法,就如Redux源碼中的用法
blog
Array.prototype.indexOf能夠進行數組的檢索,對於值類型數組,經過值比較肯定相等;對於對象數組,經過指針比較肯定相等索引