在JavaScript中,indexOf()是符串与数组共有的内置方法,它的核心功能只有一个——查找某个子串或元素在原符串、数组中的位置。
对于符串来说,indexOf()的使用很直接:第一个参数是要找的子串,第二个参数是可选的“起始查找位置”默认从0开始。比如“hello world”里找“world”,indexOf(\"world\")会返回6——因为“world”从原符串第6位开始;如果想从第5位往后找“o”,写“hello world”.indexOf(\"o\",5),结果是7,对应“world”里的“o”。要是子串不存在,它会返回-1——比如“hello”里找“x”,结果就是-1。这一点很实用,比如判断一个手机号是否包含“138”,只要写`if (phone.indexOf(\"138\") !== -1)`,条件成立就说明手机号以“138”或包含“138”。
数组的indexOf()逻辑和符串一致,但针对的是数组元素。第一个参数是目标元素,第二个是起始位置。比如数组[2,4,6,8],indexOf(6)返回2;如果从第3位开始找4,写[2,4,6,8].indexOf(4,3),结果就是-1——因为第3位之后没有4。需要意的是,数组的indexOf()用“严格相等”===比较元素:比如数组[1,\"1\",true],indexOf(1)返回0找数1,indexOf(\"1\")返回1找符串“1”,indexOf(true)返回2——即使true和1在宽松相等下是对的,但严格相等不混淆,所以indexOf()不会把true当成1。
再比如处理重复元素的场景:符串“abracadabra”里有多个“a”,想找第二个“a”的位置,用indexOf(\"a\",1)——从第1位开始找,结果是3;找第三个“a”,就用indexOf(\"a\",4),结果是5。数组[5,5,5]里找第二个5,写indexOf(5,1),返回1;找第三个,写indexOf(5,2),返回2。
不管是符串还是数组,indexOf()的逻辑都很简单:找到目标就返回它的索引从0开始计数,找不到就返回-1。这种直接性让它成为日常开发中最常用的查找工具——比如判断数组里有没有某个元素、符串里有没有特定符,甚至定位重复内容的位置,都能靠它决。
比如要检查一个列表里有没有“苹果”,数组fruits = [\"香蕉\",\"橘子\",\"苹果\",\"葡萄\"],只要写`fruits.indexOf(\"苹果\") !== -1`,就能知道列表里有苹果;要确认一个网址是不是HTTPS,写`url.indexOf(\"https://\") === 0`,如果结果是0,说明网址以“https://”。这些场景里,indexOf()的作用都是“定位”——用最直接的方式告诉你目标在哪里,或者是否存在。
来说,indexOf()就是一个“位置探测器”:给它一个目标,它要么告诉你目标在第几位,要么告诉你目标不存在。没有复杂的逻辑,没有多余的功能,却能决最常见的查找问题。
