今天誤解了Array.prototype.lastIndexOf函數, 有必要在這裏寫出來, 幫助像我同樣的新手。數組
下面這個返回幾?函數
var n = [1, 2, 3, 4, 5, 3,1]; console.log(n.lastIndexOf(3));
誤解:性能
剛開始,我覺得從後往前數,那麼應該是返回1, 由於數到底2個就是3嗎,再加上數組從0開始。prototype
我又去看文檔:code
lastIndexOf() 方法返回指定元素(也即有效的 JavaScript 值或變量)在數組中的最後一個的索引,若是不存在則返回 -1。從數組的後面向前查找,從 fromIndex 處開始。索引
既然是最後一個索引,那麼我繼續從後往前數, 獲得4.ip
可是:文檔
各位運行一下就會發現結果是5!get
這?console
因而我寫下:
按數到第一個, 若是從後往前數的話則應該是1, 從前日後就是2;
按數到第二個,從後往前第2個就,是4,從前日後第2個是5;
也就是說這是從前日後數獲得的5.
那?
其實我誤解了索引這個東西
索引不存在從哪邊數,它是定的。
也就是說,一個元素對應一個索引,不會變的。
那麼, 對於同一個元素無論是從前日後(indexOf)仍是從後往前(lastIndexOf)查找,返回值應該是同樣的。
var n = [1, 2, 3, 4, 5, 3,1]; console.log(n.indexOf(4)); console.log(n.lastIndexOf(4));
上面都返回3,我想lastIndexOf的出現是爲了性能的緣由吧,若是離後面近就用lastIndexOf,可是它又是找到最後一個索引,這有個屁用?
總結:
indexOf 從前日後第一個,返回索引
lastIndexOf 從後往前最後一個,返回索引
因此這2個查找的就是同一個元素, 不一樣的寫法,並且始終只能返回索引小的。