关于JavaScript中String的indexOf和lastIndexOf问题

indexOf:返回一个指定字符串值的最初出现位置,它是从左往右查找的
lastIndexOf:返回一个指定字符串值的最后出现位置,它是从右往左查找的
图片1也证明该原理,所以当索引是0和1,"ell"首次出现的位置是1,因为它找到完整的字符串"ell",而索引是2,位置则是6,因为它找到的是部分字符串片段
但是图2这里为什么当索引是7、8和9时,返回值都是7,为什么不是-1?不是应该索引是10或者更大一些,返回值才是7吗?
它是从右往左查找的,当索引为7、8和9时,从右往左查找不是找不到完整的"code"吗?只能找到部分片段,为什么还能找到位置?

img

img

第二个参数只限制待匹配字符串的开头。
'abab'.lastIndexOf('ab', 2)// 将返回 2 而不是 0, 因为fromIndex只限制待匹配字符串的开头。

(例如'abadefgabm'.lastIndexOf('ab', 7) 返回7,虽然查找的'ab'中的b已经在 index=8的位置了从index=7的a处向左查找仍是能找到自身a加上其后连成ab,因为fromIndex指的是待匹配字符串的开头那一个)


img

cosnt str = "01234", str2 = "234";
分解步骤:
str.lastIndexOf(str2, 3);
对比 index = 3
[str2][0] != [str][3]
[str2][1] != [str][4]
[str2][2] != [str][5]
往前 index = 2
[str2][0] == [str][2]
[str2][1] == [str][3]
[str2][2] == [str][4]
结果2
str.lastIndexOf(str2, 1);
对比 index = 1
[str2][0] != [str][1]
[str2][1] != [str][2]
[str2][2] != [str][3]
结果false
往前 index = 0
[str2][0] != [str][0]
[str2][1] != [str][1]
[str2][2] != [str][2]
结果false
所以结果为-1

大致可以这么理解一下

你设置了开始位置,就是从开始位置往左找了。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632