String.prototype.indexOf()

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

¥The indexOf() method of String values searches this string and returns the index of the first occurrence of the specified substring. It takes an optional starting position and returns the first occurrence of the specified substring at an index greater than or equal to the specified number.

Try it

语法

¥Syntax

js
indexOf(searchString)
indexOf(searchString, position)

参数

¥Parameters

searchString

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

position Optional

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

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

返回值

¥Return value

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

¥The index of the first occurrence of searchString found, or -1 if not found.

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

¥Return value when using an empty search string

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

¥Searching for an empty search string produces strange results. With no second argument, or with a second argument whose value is less than the calling string's length, the return value is the same as the value of the second argument:

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

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

¥However, with a second argument whose value is greater than or equal to the string's length, the return value is the string's length:

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

在前一个实例中,该方法的行为就好像它在第二个参数中指定的位置后面发现了一个空字符串。在后一种情况下,该方法的行为就好像在调用字符串的末尾发现了一个空字符串。

¥In the former instance, the method behaves as if it found an empty string just after the position specified in the second argument. In the latter instance, the method behaves as if it found an empty string at the end of the calling string.

描述

¥Description

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

¥Strings are zero-indexed: The index of a string's first character is 0, and the index of a string's last character is the length of the string minus 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

¥The indexOf() method is case sensitive. For example, the following expression returns -1:

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

检查发生情况

¥Checking occurrences

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

¥When checking if a specific substring occurs within a string, the correct way to check is test whether the return value is -1:

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

示例

¥Examples

使用 indexOf()

¥Using indexOf()

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

¥The following example uses indexOf() to locate substrings in the string "Brave new world".

js
const str = "Brave new world";

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

indexOf() 和区分大小写

¥indexOf() and case-sensitivity

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

¥The following example defines two string variables.

这些变量包含相同的字符串,但第二个字符串包含大写字母。第一个 console.log() 方法显示 19。但由于 indexOf() 方法区分大小写,因此在 myCapString 中找不到字符串 "cheddar",因此第二个 console.log() 方法显示 -1

¥The variables contain the same string, except that the second string contains uppercase letters. The first console.log() method displays 19. But because the indexOf() method is case sensitive, the string "cheddar" is not found in myCapString, so the second console.log() method displays -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()计算字符串中字母的出现次数

¥Using indexOf() to count occurrences of a letter in a string

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

¥The following example sets count to the number of occurrences of the letter e in the string str:

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

规范

Specification
ECMAScript Language Specification
# sec-string.prototype.indexof

¥Specifications

浏览器兼容性

BCD tables only load in the browser

¥Browser compatibility

也可以看看