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
在第二个参数上使用
ToNumber()
,而不管是否提供了一个参数,该参数将返回NaN
,而无需替换,因此算法手动将无穷大
替换为NaN
至于原因,我们只能猜测,
Array
版本是这两个版本中较新的一个(ES5),因此他们一定认为NaN
最好被0
替换,考虑到它的错误评估(不一定相关),这至少有点道理。数字(未定义)
=>NaN
<代码>[3,1,3]。lastIndexOf(3,NaN)代码>=>0
。因此,我假设在解析“from index”失败的情况下,这一定是故意的错误,为什么它的计算结果显然是0
(“from index”,而不是结果),我不知道。这对于indexOf方法可能有意义,但对于lastIndexOf则没有意义。