一:基础用法介绍

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