Javascript 数组/字符串lastIndexOf不一致的结果

Javascript 数组/字符串lastIndexOf不一致的结果,javascript,arrays,string,Javascript,Arrays,String,代码是自描述的 [3, 1, 3].lastIndexOf(3) 2 [3, 1, 3].lastIndexOf(3, undefined) 0 // wtf? //ok, lets compare with string '313'.lastIndexOf(3) 2 '313'.lastIndexOf(3, undefined) 2 //wow! 规范中的不同算法 如果提供了第二个参数,则对其执行ToInteger(),该参数将0替换为NaN 如果传递了参数fromIndex,则让n成为

代码是自描述的

[3, 1, 3].lastIndexOf(3)
2
[3, 1, 3].lastIndexOf(3, undefined)
0 // wtf?

//ok, lets compare with string

'313'.lastIndexOf(3)
2
'313'.lastIndexOf(3, undefined)
2 //wow!

规范中的不同算法

如果提供了第二个参数,则对其执行
ToInteger()
,该参数将
0
替换为
NaN

  • 如果传递了参数fromIndex,则让n成为integer(fromIndex);否则让n为len-1

  • 在第二个参数上使用
    ToNumber()
    ,而不管是否提供了一个参数,该参数将返回
    NaN
    ,而无需替换,因此算法手动将
    无穷大
    替换为
    NaN

  • 设numPos为ToNumber(位置)。(如果未定义位置,此步骤将生成值NaN)
  • ReturnIfAbrupt(numPos)
  • 如果numPos为NaN,则让pos为+∞; 否则,将pos设为ToInteger(numPos)


  • 至于原因,我们只能猜测,
    Array
    版本是这两个版本中较新的一个(ES5),因此他们一定认为
    NaN
    最好被
    0
    替换,考虑到它的错误评估(不一定相关),这至少有点道理。

    数字(未定义)
    =>
    NaN
    <代码>[3,1,3]。lastIndexOf(3,NaN)=>
    0
    。因此,我假设在解析“from index”失败的情况下,这一定是故意的错误,为什么它的计算结果显然是
    0
    (“from index”,而不是结果),我不知道。这对于indexOf方法可能有意义,但对于lastIndexOf则没有意义。