indexOf 函数

indexOf 是 JavaScript 中的一个常用字符串方法,用于查找一个子字符串在父字符串中首次出现的位置。该方法返回子字符串在父字符串中第一次出现的位置的索引。如果没有找到子字符串,则返回 -1

语法

string.indexOf(searchValue, fromIndex)

参数说明

  1. searchValue (必需):要搜索的子字符串。可以是一个字符、字符串或正则表达式。
  2. fromIndex (可选):开始搜索的位置,默认为 0。如果指定了 fromIndex,则搜索会从该位置开始(包括该位置),如果 fromIndex 为负数,它将被当作字符串长度加上 fromIndex 来计算开始搜索的位置。

返回值

  • 如果找到了 searchValue,则返回该子字符串第一次出现的索引(从 0 开始计数)。
  • 如果没有找到,则返回 -1

示例代码

1. 查找子字符串首次出现的位置

let str = "Hello, world!";
let index = str.indexOf("world");
console.log(index);  // 输出 7,因为 "world" 从索引 7 开始

2. 查找字符首次出现的位置

let str = "Hello, world!";
let index = str.indexOf("o");
console.log(index);  // 输出 4,因为第一个 "o" 在索引位置 4

3. 从指定位置开始查找

let str = "Hello, world!";
let index = str.indexOf("o", 5);
console.log(index);  // 输出 8,因为从索引 5 开始找,第二个 "o" 在索引 8

4. 未找到子字符串时返回 -1

let str = "Hello, world!";
let index = str.indexOf("xyz");
console.log(index);  // 输出 -1,因为 "xyz" 不在字符串中

5. 查找多个字符或子字符串

let str = "JavaScript is great!";
let index1 = str.indexOf("Java");
let index2 = str.indexOf("great");
let index3 = str.indexOf("Java", 5);  // 从索引 5 开始查找 "Java"
console.log(index1);  // 输出 0
console.log(index2);  // 输出 14
console.log(index3);  // 输出 -1,因为从索引 5 开始没有 "Java"

indexOf 的注意事项

  1. 大小写敏感
    indexOf 是大小写敏感的,这意味着 "hello" 和 "Hello" 被认为是不同的字符串。let str = "Hello World!"; let index = str.indexOf("hello"); console.log(index); // 输出 -1,因为 "hello" 与 "Hello" 不匹配
  2. 返回值从 0 开始
    indexOf 返回的是 第一个匹配的索引位置,索引从 0 开始。如果找不到,则返回 -1
  3. 从指定位置开始查找
    fromIndex 参数允许你指定从字符串的某个索引位置开始搜索。如果这个参数为负数,JavaScript 会将其转换为从字符串末尾开始计算的位置。let str = "abcdef"; let index = str.indexOf("b", -2); console.log(index); // 输出 1,因为从倒数第二个字符开始,"b" 在索引位置 1
  4. 空字符串和 indexOf
    indexOf 也可以用于查找空字符串。对于任何非空字符串,空字符串的位置总是从索引 0 开始(即空字符串在每个位置都可以匹配)。let str = "abc"; let index = str.indexOf(""); console.log(index); // 输出 0,因为空字符串从索引 0 开始

与 lastIndexOf 的区别

  • indexOf 查找的是 首次出现 的位置。
  • lastIndexOf 查找的是 最后一次出现 的位置。

例如:

let str = "Hello, world!";
console.log(str.indexOf("o"));      // 输出 4(第一个 "o")
console.log(str.lastIndexOf("o"));  // 输出 8(最后一个 "o")

总结

  • indexOf 是一个非常常用的方法,用于查找子字符串或字符在字符串中首次出现的位置。
  • 它是 大小写敏感 的,返回值是子字符串的起始位置索引(从 0 开始),如果没有找到,返回 -1
  • indexOf 还支持从指定位置开始查找(通过 fromIndex 参数)。

通过合理使用 indexOf,你可以轻松处理字符串查找的需求,在许多字符串操作中都有广泛的应用。