String.prototype.indexOf()

indexOf()String 值的方法,它搜索此字符串并返回指定子字符串第一次出现的索引。它采用可选的起始位置并返回指定子字符串的第一次出现,其索引大于或等于指定数字。

试试看

语法

js
indexOf(searchString)
indexOf(searchString, position)

参数

searchString

要搜索的子字符串。所有值都将强制转换为字符串,因此省略它或传递undefined会导致indexOf()搜索字符串"undefined",这很少是你想要的。

position 可选

该方法返回指定子字符串在索引大于或等于position的位置上的第一次出现,默认为0。如果position大于调用字符串的长度,则该方法根本不搜索调用字符串。如果position小于零,则该方法的行为与position0时相同。

  • 'hello world hello'.indexOf('o', -5) 返回 4 — 因为它导致该方法的行为就像第二个参数为0一样,并且在索引大于或等于0的位置上第一次出现o是在位置4
  • 'hello world hello'.indexOf('world', 12) 返回 -1 — 因为,虽然子字符串world确实出现在索引6处,但该位置不大于或等于12
  • 'hello world hello'.indexOf('o', 99) 返回 -1 — 因为99大于hello world hello的长度,这会导致该方法根本不搜索字符串。

返回值

找到的searchString第一次出现的索引,如果未找到则返回-1

使用空搜索字符串时的返回值

搜索空搜索字符串会产生奇怪的结果。如果没有第二个参数,或者第二个参数的值小于调用字符串的长度,则返回值与第二个参数的值相同。

js
"hello world".indexOf(""); // returns 0
"hello world".indexOf("", 0); // returns 0
"hello world".indexOf("", 3); // returns 3
"hello world".indexOf("", 8); // returns 8

但是,如果第二个参数的值大于或等于字符串的长度,则返回值为字符串的长度。

js
"hello world".indexOf("", 11); // returns 11
"hello world".indexOf("", 13); // returns 11
"hello world".indexOf("", 22); // returns 11

在前面一种情况下,该方法的行为就像它在第二个参数中指定的位置之后立即找到一个空字符串一样。在后一种情况下,该方法的行为就像它在调用字符串的末尾找到一个空字符串一样。

描述

字符串的索引从零开始:字符串第一个字符的索引为0,字符串最后一个字符的索引为字符串长度减 1。

js
"Blue Whale".indexOf("Blue"); // returns  0
"Blue Whale".indexOf("Blute"); // returns -1
"Blue Whale".indexOf("Whale", 0); // returns  5
"Blue Whale".indexOf("Whale", 5); // returns  5
"Blue Whale".indexOf("Whale", 7); // returns -1
"Blue Whale".indexOf(""); // returns  0
"Blue Whale".indexOf("", 9); // returns  9
"Blue Whale".indexOf("", 10); // returns 10
"Blue Whale".indexOf("", 11); // returns 10

indexOf() 方法区分大小写。例如,以下表达式返回-1

js
"Blue Whale".indexOf("blue"); // returns -1

检查出现次数

当检查特定子字符串是否出现在字符串中时,正确的检查方法是测试返回值是否为-1

js
"Blue Whale".indexOf("Blue") !== -1; // true; found 'Blue' in 'Blue Whale'
"Blue Whale".indexOf("Bloe") !== -1; // false; no 'Bloe' in 'Blue Whale'

示例

使用 indexOf()

以下示例使用indexOf()在字符串"Brave new world"中查找子字符串。

js
const str = "Brave new world";

console.log(str.indexOf("w")); // 8
console.log(str.indexOf("new")); // 6

indexOf() 和大小写敏感性

以下示例定义了两个字符串变量。

这两个变量包含相同的字符串,除了第二个字符串包含大写字母。第一个console.log() 方法显示 19。但是,因为indexOf() 方法区分大小写,所以字符串 "cheddar"myCapString 中未找到,因此第二个 console.log() 方法显示 -1

js
const myString = "brie, pepper jack, cheddar";
const myCapString = "Brie, Pepper Jack, Cheddar";

console.log(myString.indexOf("cheddar")); // 19
console.log(myCapString.indexOf("cheddar")); // -1

使用 indexOf() 统计字符串中字母的出现次数

以下示例将 count 设置为字符串 str 中字母 e 的出现次数

js
const str = "To be, or not to be, that is the question.";
let count = 0;
let position = str.indexOf("e");

while (position !== -1) {
  count++;
  position = str.indexOf("e", position + 1);
}

console.log(count); // 4

规范

规范
ECMAScript 语言规范
# sec-string.prototype.indexof

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅