JS的indexOf用法,这里先看看W3C的介绍:W3C-indexOf
官方介绍了常规用法,但是并没有告诉我们fromindex为负数,或者fromindex大于字符串长度,再或者searchvalue为""这些情况的用法!!!
这些非常规情况一般人很难想到这么尝试,当然咯,我也是一般人,所以这中写法并不是我想到的,是一个道友晚上问我,我看了一下,乍一看这不就是indexOf查找么,简单,但是仔细一看,有点想不通,于是就查了一下资料,当场还没查出来,就给了她一个我猜想的答案,但是我知道这个答案有点站不住脚,那晚加班回来也有点累了,还要洗澡,就说明天帮她看看!!!
indexOf-字符串
1.开始位置为负数
这种情况的话这个负数会自动转换为0开始查找
跑两段代码就能提现
2.开始位置大于/等于字符串长度
var s=“0123456789123”
console.log(s.indexOf(“3”,13));//-1
console.log(s.indexOf(“3”,14));//-1
补充一点这里查找的最大范围也就是字符串的长度
3.查找内容为""
这里的话不是很好理解,看一段代码
底层匹配逻辑步骤
1.得到要匹配的字符串长度,这里的"“长度就是0
2.在原字符串上从fromindex开始截,截取长度为需要匹配的字符串长度,这里也就是indexOf(fromindex,0)
那么这里不管怎么截取,截取到的永远是”",前提是传入需要匹配的字符串也为""
3.将截取到的字符串和需要匹配的字符串对比,这里实际上就是两个"“在对比,当然两个”“坑定也是相等的
4.结论当indexOf传入需要匹配的内容为”",返回开始位置
这里的第一行代码就能验证查找开始位置为负数是默认从0开始,这里的第三行代码也能验证查找的最大范围是字符串的长度
indexOf-数组
数组的非常规操作就和字符串的截然不同
1.开始位置为负数
简单分析第一行输出结果为-1
数组的fromIndex为-1时会开始位置会从后往前1个位置,也就是倒数第1个开始,那么这时是从最后一位9开始找2,这肯定是找不到的返回-1
分析第二行输出结果,套用上面的逻辑
-5从后往前5个位置,也就是定在第二个4的位置,那么从这里开始找,找到的是第二个2,返回第二个2的位置下标为10
验证-1是从数组倒数第一个开始并且包含
第三行代码就能验证这个结论
**注意:**这里也存在像字符串的负值范围,负值大小抵消后的索引值仍小于0,则整个数组都将会被查询。也就是从头开始查。
第四行代码能够验证这个结论
2.开始位置大于/等于字符串长度
这里和字符串是类似的
3.查找内容为""
这里直接是取出对应的数组下标中的值来和""对比,而不是像字符串一样截取然后对比,所以这里返回-1