JS的字符串/数组使用indexOf()开始位置为-1,查找内容为““,开始位置大于字符串长度

JS的indexOf用法,这里先看看W3C的介绍:W3C-indexOf
在这里插入图片描述
官方介绍了常规用法,但是并没有告诉我们fromindex为负数,或者fromindex大于字符串长度,再或者searchvalue为""这些情况的用法!!!

这些非常规情况一般人很难想到这么尝试,当然咯,我也是一般人,所以这中写法并不是我想到的,是一个道友晚上问我,我看了一下,乍一看这不就是indexOf查找么,简单,但是仔细一看,有点想不通,于是就查了一下资料,当场还没查出来,就给了她一个我猜想的答案,但是我知道这个答案有点站不住脚,那晚加班回来也有点累了,还要洗澡,就说明天帮她看看!!!

indexOf-字符串

1.开始位置为负数
这种情况的话这个负数会自动转换为0开始查找
跑两段代码就能提现

var s="0123456789123"
console.log(s.indexOf("3",-1));//3
console.log(s.indexOf("3",-100));//3

2.开始位置大于/等于字符串长度
var s=“0123456789123”
console.log(s.indexOf(“3”,13));//-1
console.log(s.indexOf(“3”,14));//-1
补充一点这里查找的最大范围也就是字符串的长度

3.查找内容为""
这里的话不是很好理解,看一段代码

var s="0123456789123"
console.log(s.indexOf("",-1)); //0
console.log(s.indexOf("",5));  //5
console.log(s.indexOf("",140));//13

底层匹配逻辑步骤
1.得到要匹配的字符串长度,这里的"“长度就是0
2.在原字符串上从fromindex开始截,截取长度为需要匹配的字符串长度,这里也就是indexOf(fromindex,0)
那么这里不管怎么截取,截取到的永远是”",前提是传入需要匹配的字符串也为""
3.将截取到的字符串和需要匹配的字符串对比,这里实际上就是两个"“在对比,当然两个”“坑定也是相等的
4.结论当indexOf传入需要匹配的内容为”",返回开始位置

这里的第一行代码就能验证查找开始位置为负数是默认从0开始,这里的第三行代码也能验证查找的最大范围是字符串的长度

indexOf-数组

数组的非常规操作就和字符串的截然不同
1.开始位置为负数

var arr = [0,1,2,3,4,5,6,5,4,3,2,1,9];
console.log(arr.indexOf(2, -1)); // -1
console.log(arr.indexOf(2, -5)); // 10
console.log(arr.indexOf(9, -1)); // 12
console.log(arr.indexOf(6, -100)); // 6

简单分析第一行输出结果为-1
数组的fromIndex为-1时会开始位置会从后往前1个位置,也就是倒数第1个开始,那么这时是从最后一位9开始找2,这肯定是找不到的返回-1

分析第二行输出结果,套用上面的逻辑
-5从后往前5个位置,也就是定在第二个4的位置,那么从这里开始找,找到的是第二个2,返回第二个2的位置下标为10

验证-1是从数组倒数第一个开始并且包含
第三行代码就能验证这个结论

**注意:**这里也存在像字符串的负值范围,负值大小抵消后的索引值仍小于0,则整个数组都将会被查询。也就是从头开始查。
第四行代码能够验证这个结论

2.开始位置大于/等于字符串长度

var arr = [0,1,2,3,4,5,6,5,4,3,2,1,9];
console.log(arr.indexOf(9, 12)); // 12
console.log(arr.indexOf(9, 13)); // -1

这里和字符串是类似的

3.查找内容为""

console.log(arr.indexOf("", -12)); // -1
console.log(arr.indexOf("", 2)); // -1

这里直接是取出对应的数组下标中的值来和""对比,而不是像字符串一样截取然后对比,所以这里返回-1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员劝退师-TAO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值