1.Array.indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。

语法:arr.indexOf(searchElement[, fromIndex])

参数:

searchElement:需要查招的元素

fromIndex:开始查找的位置。如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回-1。如果参数中提供的索引值是一个负值,则将其作为数组末尾的一个抵消,即-1表示从最后一个元素开始查找,-2表示从倒数第二个元素开始查找 ,以此类推。 注意:如果参数中提供的索引值是一个负值,并不改变其查找顺序,查找顺序仍然是从前向后查询数组。如果抵消后的索引值仍小于0,则整个数组都将会被查询。其默认值为0.

返回值:首个被找到的索引位置,如果找不到则返回-1

例子:

let arr = [1,2,3,4,5,4,3,2,1];

console.log(arr.indexOf(1)); // 没有填fromIndex所以默认从索引为0的位置开始往后查找
// 0
console.log(arr.indexOf(1,1)); // 表示从索引为1的位置开始往后查找
// 8

案例:利用indexOf实现数组去重

// 想要的结果是[1,2,3,4,5]
let arr = [1, 2, 3, 1, 2, 4, 5];
// 利用arr.filter遍历出arr数组里的所有值和相对索引
let newArr = arr.filter(function (value, index, step) {
    // 判断他第一次出现的位置是不是当前索引,是的话返回给newArr
    return step.indexOf(value) == index;
});
console.log(newArr);
// [1,2,3,4,5]

 扩展:上面代码中的filter的使用:点击查看

2.String.indexOf() 方法返回调用它的 String 对象中第一次出现的指定值的索引,如果不存在,则返回-1。

语法:str.indexOf(searchElement[, fromIndex])

参数:

searchStr:需要查招的字符

fromIndex:开始查找的位置。如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回-1。如果参数中提供的索引值是一个负值,则将其作为数组末尾的一个抵消,即-1表示从最后一个元素开始查找,-2表示从倒数第二个元素开始查找 ,以此类推。 注意:如果参数中提供的索引值是一个负值,并不改变其查找顺序,查找顺序仍然是从前向后查询数组。如果抵消后的索引值仍小于0,则整个数组都将会被查询。其默认值为0.

返回值:首个被找到的索引位置,如果找不到则返回-1

例子:

let str = 'abcdcba';

console.log(str.indexOf('a')); // 没有填fromIndex所以默认从索引为0的位置开始往后查找
// 0
console.log(str.indexOf('a',1)); // 表示从索引为1的位置开始往后查找
// 6

str.indexOf有一个奇怪的现象,当searchStr是一个空字符串的时候,他会返回fromIndex的值,比如fromIndex不填的时候他默认是0,他返回的结果就是0。

如果fromIndex的值是他本身的长度还是大于他,他都会返回他本身的length,直接看代码

let str = 'abcdcba';

console.log(str.indexOf(''));
// 0
console.log(str.indexOf('',0));
// 0
console.log(str.indexOf('',3));
// 3
console.log(str.indexOf('',str.length));
// 7
console.log(str.indexOf('',100));
// 7

案例:屏蔽关键是:wc

let str = 'on tow wc tow wc on';
let k = 'wc';
while (str.indexOf(k) != -1){
    str = str.replace(k,'*' * k.length);
}
console.log(str);
// on tow * tow * on

扩展:str.replace的使用