js indexOf使用及注意事项以及数组使用indexOf

一、定义和用法

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

语法

stringObject.indexOf(searchvalue,fromindex)
参数描述
searchvalue必需。规定需检索的字符串值。
fromindex可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。

说明

该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 searchvalue。开始检索的位置在字符串的 fromindex 处或字符串的开头(没有指定 fromindex 时)。如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。stringObject 中的字符位置是从 0 开始的。

提示和注释

注释:indexOf() 方法对大小写敏感!

注释:如果要检索的字符串值没有出现,则该方法返回 -1。

实例

在本例中,我们将在 "Hello world!" 字符串内进行不同的检索:

<script type="text/javascript">

var str="Hello world!"
document.write(str.indexOf("Hello") + "<br />")
document.write(str.indexOf("World") + "<br />")
document.write(str.indexOf("world"))

</script>

以上代码的输出:

0
-1
6

以上参考于w3cW3C indexOf用法

二、字符串indexOf使用

一、字符串使用indexOf很简单

是否包含某传入的相同字符,不包含返回-1,包含则返回其下标(只返回包含的第一个下标);indexOf() 方法对大小写敏感!

let arr=str="arra";
str.indexOf('a') //结果为 0 包含  有两个a只返回第一个的下标
str.indexOf('A') //结果为-1 不包含 对大小写敏感

二、数组使用indexOf(前提是必须寻找整个项)

(1)数组项为数字或者字符串数字

 我一直以为indexOf只适用于字符串,结果在之前的项目里看到数组也能使用很新奇,使用的方法及注意事项(踩坑)特此记录分享一下。

let arr=['1','2','1'];
arr.indexOf('1'); // 0 包含 只返回包含的第一个下标
arr.indexOf(1); // -1 不包含  从这可以看出数组使用indexOf区分类型(type)
arr.indexOf(String(1)); // 0 包含  从这可以看出数组使用indexOf区分类型(type)

总结:

数组项为数字或者字符串数字数组使用indexOf() 方法对类型也敏感。

(2)数组项为字符串

let arr=['abbc','b'];
arr.indexOf('b') ; //1  包含
arr.indexOf('B') ; //-1 不包含 说明对大小写依然敏感
arr.indexOf('c') ; //-1 不包含 对比整个项(而不是一个项里找)注意不要误解:不要认为arr[0]='abbc' arr.indexOf('c') 它不会对一个项里查找

总结:

数组项为字符串数组使用indexOf() 方法对大小写敏感。

使用场景:

1.找出数组是否包含某一个值

   比如:arr =['abc','bb'];是否包含bb这一项

let arr=['abc','bb'];
arr.indexOf('bb'); //返回 1 包含(注意类型)

if(arr.indexOf('bb')>-1){
  alert(包含)
}

一般项目中都会判断indexOf是否大于-1来判断是否包含。

 lastIndexOf和indexOf差不多,前者只是返回包含的最后一项标,后者是第一项下标。上面的也适用于lastIndexOf

数组是否包含某个值,还可以使用includesfind。当然循环遍历判断也行(some,every,filter,map,for等);

let arr=[1,,2,3]
let a=false;
arr.map((item)=>{
  if(item=='1'){
   a=true;
 }  
})
if(a){
 alert('包含')
}

补充:

其实es6数组字符串都出了个 includes方法 和 indexOf类似 ,includes有兼容性问题,如果浏览器不支持es6的语法就无法使用。不过现代高版本浏览器几乎都支持(可以在这个网站查看兼容图"includes" | Can I use... Support tables for HTML5, CSS3, etc)。

 

用法也很简单就是 .includes即可 。需要注意的是 数组调用时 也需要保持类型相同 (下面的代码也体现出来了,20是 输出true ,字符串20时 输出false)。

    let arr=[11,23,20];
    console.log(arr.includes(20),arr.includes("20")); //true false

    let str="abx";
    console.log(str.includes("a")); //true 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

崽崽的谷雨

漫漫前端路,摸爬滚打

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

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

打赏作者

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

抵扣说明:

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

余额充值