2012-08-13 63 views
4

,Array實例有兩個方法,數組的lastIndexOf返回-1時開始未定義在javascript

[].indexOf(searchvalue [,start]) 

[].lastIndexOf(searchvalue [,start]) 

是行爲古怪,如果 「開始」 參數未定義:

[1,2,3].lastIndexOf(2) // 1 
[1,2,3].lastIndexOf(2,undefined) // -1 
[1,2,3].indexOf(2,undefined) // 1 

這種情況發生在chrome和firefox中,那麼indexOf和lastIndexOf的理論是什麼? Ÿ

回答

4
array.lastIndexOf(searchElement[, fromIndex]) 

的fromIndex處開始向後搜索的索引。數組的長度默認爲 ,即整個數組將被搜索。如果 索引大於或等於數組的長度,則將搜索整個 數組。如果爲負,則將其作爲數組末尾的 的偏移量。請注意,即使索引爲負數, 陣列仍然從後到前搜索。如果計算的索引是 小於0,則返回-1,即不搜索該數組。

[1,2,3].lastIndexOf(2,undefined)[1,2,3].lastIndexOf(2, 0)相同,所以只搜索第一個元素。

[1,2,3].lastIndexOf(2, 0)將返回-1

[1,2,3].lastIndexOf(1, 0)將返回0

+0

這是正確的,但爲什麼當的fromIndex是「undfined」,它也返回-1 – 2012-08-13 06:16:06

+0

從一位瘋狂的阿拉伯學者的作品引用,這位阿拉伯學者的名字太有名了,不值得信任? – katspaugh 2012-08-13 06:21:08

+0

@GuanYuxin - 它返回-1,因爲lastIndexOf通過數組向後*搜索。如果from參數未定義,它將在第一個元素處開始搜索,該元素的值爲1。 – 2012-08-13 06:23:26

-1

這是Array lastIndexOf的標準實現。 Javascript Array lastIndexOf() Method

需要注意的是:

var from = Number(arguments[1]); 
if (isNaN(from)) 
{ 
    from = len - 1; 
} 
else 
{ 
    from = (from < 0) 
     ? Math.ceil(from) 
     : Math.floor(from); 
    if (from < 0) 
    from += len; 
    else if (from >= len) 
    from = len - 1; 
} 

我最初認爲from等於0,但實際上它是NaN。 一個可能的結論是,Mozilla或WebKit的執行是不是你想要的

Another link-Javascript Array indexOf() Method

你可以看到它直接使用

var from = Number(arguments[1]) || 0; 
2

array.indexOf()在指定點開始測試,然後繼續前進直到找到與指定值匹配的數組元素。因此,當你使用[1,2,3].indexOf(2,undefined),它開始在數組索引0處(其undefined被轉換成),並進行到測試每個元素:

2 == 1 // false 
2 == 2 // true, returns index 1 

array.lastIndexOf(),但是,開始從指定的向後測試點。因此,當你使用[1,2,3].lastIndexOf(2,undefined),使用Javascript起始於具有索引0的數組元素,然後試圖向後繼續:

2 == 1 // false, no more elements to test, return -1