Javascript 数组';未定义start时,s lastIndexOf返回-1

Javascript 数组';未定义start时,s lastIndexOf返回-1,javascript,Javascript,在javascript中,数组实例有两种方法 [].indexOf(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对“未定义”的处理有什么不同的理论呢 array.l

在javascript中,数组实例有两种方法

[].indexOf(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对“未定义”的处理有什么不同的理论呢

array.lastIndexOf(searchElement[, fromIndex])
fromIndex开始向后搜索的索引。默认为 数组的长度,即将搜索整个数组。如果 索引大于或等于整个数组的长度 将搜索数组。如果为负值,则将其作为从 数组的末尾。请注意,即使索引为负数 数组仍从后向前搜索。如果计算的索引为 返回的值小于0,-1,即不搜索数组

[1,2,3].lastIndexOf(2,未定义)
[1,2,3].lastIndexOf(2,0)
相同,因此只搜索第一个元素

[1,2,3]。lastIndexOf(2,0)
将返回
-1


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

以下是数组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;
}
array.indexOf()
在指定点开始测试,然后继续向前,直到找到与指定值匹配的数组元素。因此,当您使用
[1,2,3].indexOf(2,未定义)
时,它从索引0处的数组元素开始(未定义的
转换为该数组元素),然后继续测试每个元素:

2 == 1 // false
2 == 2 // true, returns index 1
但是,
array.lastIndexOf()
从指定点开始向后测试。因此,当您使用
[1,2,3].lastIndexOf(2,未定义)
时,Javascript从索引为0的数组元素开始,然后尝试向后继续:

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

这是正确的,但为什么fromIndex是“未定义”时,它也会返回-1来自一位阿拉伯疯狂学者的作品,他的名字太有名了,不值得信任?@GuanYuxin-它返回-1,因为lastIndexOf在数组中向后搜索。如果from参数未定义,它将从第一个元素开始搜索,该元素的值为1。
2 == 1 // false
2 == 2 // true, returns index 1
2 == 1 // false, no more elements to test, return -1