当start未定义时,Array的lastIndexOf返回-1

时间:2012-08-13 06:09:00

标签: javascript

在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”不同

3 个答案:

答案 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;