一:基础用法介绍
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
语法
stringObject.indexOf(searchvalue,fromindex)
参数 | 描述 |
searchvalue | 必需。规定需检索的字符串值。 |
fromindex | 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。 |
说明
该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 searchvalue。开始检索的位置在字符串的 fromindex 处或字符串的开头(没有指定 fromindex 时)。如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。stringObject 中的字符位置是从 0 开始的。
提示和注释
注释:indexOf() 方法对大小写敏感!
注释:如果要检索的字符串值没有出现,则该方法返回 -1。
二:扩展使用总结
实际上记录这个函数的初衷是总结扩展使用,以上的基础功能介绍 百度到处都是!
代码示例
1.对于数组而言,同样适用! indexOf返回某个值在数组中第一次出现的索引,若没有出现返回-1
console.log(['submit', 'reset', 'button'].indexOf('button') > -1)
// true
2.数组内容的删除与添加
var arr=['Mike','Chen Jie','Amy','Sarah'];
//将Amy从数组中删除
arr.splice(arr.indexOf('Amy'),1)
//将Amy替换为Zhang Peng,并追加Wu Yifan,Miss White
arr.splice(arr.indexOf('Amy'),1,'Zhang Peng','Wu Yifan','Miss White')
3.与数组使用注意的问题
let arr = ['orange', '2016', '2016'];
arr.indexOf('orange'); //0
arr.indexOf('o'); //-1
arr.indexOf('2016'); //1
arr.indexOf(2016); //-1
//arr.indexOf(‘orange') 输出 0 因为 ‘orange' 是数组的第 0 个元素,匹配到并返回下标。
// arr.indexOf(‘o') 输出 -1 因为此方法不会在每一个元素的基础上再次执行 indexOf 匹配。
// arr.indexOf(‘2016') 输出 1 因为此方法从头匹配直到匹配到时返回第一个数组元素的下表,而不是返回全部匹配的下标。
//arr.indexOf(2016) 输出 -1 注意:这里不会做隐式类型转换
4.算法:计算出现的次数
可指定在字符串中开始检索的位置,这个可以用来快速查找字符串中出现某个字母的位置及次数。
var str='what is your name? my name is Jhon.'
var positions=new Array();
//初始化索引
var index=str.indexOf('m');
while(index>-1){
positions.push(index);
//改变索引
index=str.indexOf('m',index+1);//这里利用了第二个参数的作用,实现依次往下找-----
}
console.log(positions)
// [15, 19, 24]
新思路:该函数返回首次出现的位置。可以利用第二个参数的功能,依次改变查找的位置。实现全部字段的查找
5.indexOf和includes的用法及区别
从功能上 这俩都能校验是否存在
区别: 如果数组中有NaN. 则 indexOf无法匹配到. 而includes可以匹配到.
let arr = [1,2,3,4,5,6,NaN];
console.log(arr.includes(3, 0)) // true
console.log(arr.includes(3, 3)) // false
console.log(arr.indexOf(3)) // 2
// 以下是区别
console.log(arr.includes(NaN, 0)) // true
console.log(arr.indexOf(NaN)) // -1 数组中有NaN 但返回了-1
6 .类型转换
let numStr = '2016';
numStr.indexOf('2'); //0
numStr.indexOf(2); //0
//ndexOf 会做简单的类型转换,把数字转换成字符串 '2' 然后再执行。
let num = 2016;
num.indexOf(2); //Uncaught TypeError: num.indexOf is not a function
//注意::: number类型 没有 indexOf 方法 所以报错
666