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 |