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 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |