String.prototype.indexOf()

Метод indexOf (індекс елемента) значень String шукає в поточному рядку та повертає індекс першого входження заданого підрядка. Він приймає необов'язкову стартову позицію та повертає перше входження заданого підрядка за індексом, що більший або дорівнює заданому числу.

Спробуйте його в дії

Примітка: Інформація про однойменний метод масиву знаходиться за посиланням Array.prototype.indexOf().

Синтаксис

indexOf(searchString)
indexOf(searchString, position)

Параметри

searchString

Підрядок для пошуку. Всі значення зводяться до рядків, тож пропуск цього параметра і передача undefined призводять до того, що indexOf шукає рядок "undefined", а це рідко саме те, що необхідно.

position Необов'язкове

Цей метод повертає індекс першого входження заданого підрядка на позиції, що більша або дорівнює значенню position, чиє усталене значення – 0. Якщо position перевищує довжину рядка, на якому викликано метод, то цей метод не шукає нічого взагалі. Якщо position менше за нуль, то метод поводиться так, ніби position дорівнює 0.

  • '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, через що метод не шукає нічого взагалі.

Повернене значення

Індекс першої знайденої появи значення searchValue у рядку, або -1, якщо його там не знайдено.

Повернене значення, коли метод застосовано з порожнім шуканим рядком

Пошук порожнього рядка породжує дивні результати. Без другого аргументу, а також з другим аргументом, чиє значення – менше за довжину рядка, на якому викликано метод, повернене значення – тотожне значенню другого аргументу:

"привіт, світе".indexOf(""); // повертає 0
"привіт, світе".indexOf("", 0); // повертає 0
"привіт, світе".indexOf("", 3); // повертає 3
"привіт, світе".indexOf("", 8); // повертає 8

Проте коли другий аргумент більший або дорівнює довжині рядка, то повернене значення – довжина рядка:

"привіт, світе".indexOf("", 13); // повертає 13
"привіт, світе".indexOf("", 15); // повертає 13
"привіт, світе".indexOf("", 22); // повертає 13

У першому випадку метод поводиться так, ніби знайшов порожній рядок зразу після позиції, заданої як другий аргумент. У другому випадку він поводиться так, ніби знайшов порожній рядок у кінці рядка, на якому викликаний.

Опис

Рядки індексуються від нуля: Індекс першого символу рядка – 0, а індекс останнього символу рядка – довжина рядка мінус 1.

"Синій Кит".indexOf("Синій"); // повертає  0
"Синій Кит".indexOf("Ситній"); // повертає -1
"Синій Кит".indexOf("Кит", 0); // повертає  6
"Синій Кит".indexOf("Кит", 6); // повертає  6
"Синій Кит".indexOf("Кит", 7); // повертає -1
"Синій Кит".indexOf(""); // повертає  0
"Синій Кит".indexOf("", 8); // повертає  8
"Синій Кит".indexOf("", 9); // повертає 9
"Синій Кит".indexOf("", 10); // повертає 9

Метод indexOf() — чутливий до регістру. Наприклад, наступний вираз поверне -1:

"Синій Кит".indexOf("синій"); // повертає -1

Перевірка збігів

При перевірці того, чи зустрічається заданий підрядок у рядку, коректний спосіб це зробити – порівняти повернене значення з -1:

"Синій Кит".indexOf("Синій") !== -1; // true; знайдено 'Синій' у 'Синій Кит'
"Синій Кит".indexOf("Синній") !== -1; // false; немає 'Синній' у 'Синій Кит'

Приклади

Застосування методу indexOf()

Наступний приклад використовує indexOf() для визначення розташування підрядків у рядку "Прекрасний новий світ".

const str = "Прекрасний новий світ";

console.log(str.indexOf("н")); // 7
console.log(str.indexOf("новий")); // 11

Метод indexOf() і чутливість до регістру

Наступний приклад оголошує дві рядкові змінні.

Змінні мають ідентичний вміст, за винятком того, що другий рядок також містить літери верхнього регістру. Перший виклик методу console.log() покаже 20. Але оскільки метод indexOf() чутливий до регістру, рядок "чеддер" не знайдеться у myCapString, тож другий виклик console.log() виведе -1.

const myString = "брі, перцевий джек, чеддер";
const myCapString = "Брі, Перцевий Джек, Чеддер";

console.log(myString.indexOf("чеддер")); // 20
console.log(myCapString.indexOf("чеддер")); // -1

Застосування indexOf() для обрахунку кількості появ певної літери у рядку

Наступний приклад встановлює кількість count появ літер т у рядку str:

const str = "Чи бути, чи не бути — ось питання.";
let count = 0;
let position = str.indexOf("т");

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

console.log(count); // 3

Специфікації

Сумісність із браузерами

desktop mobile server
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Deno Node.js
indexOf
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 3
Opera Full support 3
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0

Дивіться також