在javascript中,Array实例有两种方法,
[].indexOf(searchvalue [,start])
和
[].lastIndexOf(searchvalue [,start])
如果“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的理论对待“undefined”不同
答案 0 :(得分:4)
array.lastIndexOf(searchElement[, fromIndex])
fromIndex开始向后搜索的索引。默认为 数组的长度,即将搜索整个数组。如果 index大于或等于数组的长度,整数 将搜索数组。如果为负数,则将其作为偏移量 数组的结尾。请注意,即使索引为负数,也是如此 仍然从后到前搜索数组。如果计算的索引是 小于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
。
答案 1 :(得分: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
答案 2 :(得分:-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;