4

在 javascript 中,Array 实例有两种方法,

[].indexOf(searchvalue [,start])

[].lastIndexOf(searchvalue [,start])

如果 "start" 参数未定义,is 的行为会很奇怪:

[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

3 回答 3

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

于 2012-08-13T06:13:42.993 回答
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
于 2012-08-13T06:18:49.217 回答
-1

这是 Array lastIndexOf 的标准实现。Javascript 数组 lastIndexOf() 方法

注意:

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的实现不是你想要的

另一个链接——Javascript Array indexOf() 方法

可以直接使用

    var from = Number(arguments[1]) || 0;
于 2012-08-13T06:15:15.843 回答