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

Заувага: Клас Array має подібний метод indexOf().

Синтаксис

str.indexOf(searchValue[, fromIndex])

Параметри

searchValue
Рядок, що є шуканим значенням.
fromIndex Optional
Ціле число, що позначає індекс, з якого має розпочинатися пошук; типовим значенням є 0. Якщо вказане значення fromIndex менше 0 чи більше від str.length, пошук розпочнеться з індексу 0 та str.length відповідно, себто min(max(0, fromIndex), str.length).

Вертає

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

Опис

Символи рядка (назвемо його str) мають індекси (зліва направо) від 0 (перший) до str.length - 1 (останній). Це стосується і параметра fromIndex, і значення, яке вертає метод:

'Непозбувна бентега'.indexOf('Непозбувна');     // вертає  0
'Непозбувна бентега'.indexOf('Непозбувний');    // вертає -1
'Непозбувна бентега'.indexOf('Непозбувна', 1);  // вертає -1

'Непозбувна бентега'.indexOf('бентега', 1);     // вертає 11
'Непозбувна бентега'.indexOf('бентега', 11);    // вертає 11
'Непозбувна бентега'.indexOf('бентега', 12);    // вертає -1

Порожній підрядок можна «знайти» в будь-якій частині рядка:

'Розкішниця'.indexOf('');      // вертає  0
'Розкішниця'.indexOf('', 9);   // вертає  9
'Розкішниця'.indexOf('', 10);  // вертає 10
'Розкішниця'.indexOf('', 11);  // вертає 10

Зважте на те, що метод indexOf() є регістрозалежним. Наприклад, вираз нижче повертає -1:

'Непозбувна бентега'.indexOf('Бентега');  // вертає -1

Перевірка наявності підрядка

Зважте на те, що для перевірки наявності підрядка не можна обмежитись стислим виразом if (str.indexOf(substr)), оскільки значення 0 не перетворюється на true, а -1 не перетворюється на false. Отже, належить у явний спосіб порівнювати значення, що повертається методом indexOf(), із значенням -1:

'Непозбувна бентега'.indexOf('бентега') !== -1;  // true
'Непозбувна бентега'.indexOf('Бентега') !== -1;  // false

Приклади

Використання indexOf() та lastIndexOf()

Цей приклад наочно показує відмінність між використанням indexOf() та lastIndexOf() за однакових обставин:

'абабагаламага'.indexOf('га');        // вертає 5
'абабагаламага'.lastIndexOf('га');    // вертає 11

'абабагаламага'.indexOf('баба');      // вертає 1
'абабагаламага'.lastIndexOf('баба');  // вертає 1

Регістрозалежність метода indexOf()

В цьому прикладі наведено два текстових рядки. Їх вміст є майже однаковим, але в strCapitalized слова починаються з великої літери, а в str — з малої. В обох рядках ми за допомогою indexOf() шукаємо підрядок "камамбер", але дається взнаки регістрозалежність метода, а отже str містить шуканий підрядок, а strCapitalized — ні:

var str = 'брі, дорблю, камамбер';
var strCapitalized = 'Брі, Дорблю, Камамбер';

str.indexOf('камамбер');             // вертає 13
strCapitalized.indexOf('камамбер');  // вертає -1

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

В цьому прикладі наведено функцію, що за допомогою метода indexOf() рахує кількість вживань певної літери (або навіть підрядка) в рядку, щоразу посуваючи далі індекс символа, з якого пошук починається (параметр fromIndex):

function countOccurrences(string, c) {
  var count = 0;
  var pos = string.indexOf(c);

  while (pos >= 0) {
    count++;
    pos = string.indexOf(c, pos + 1);
  }

  return count;
}

countOccurrences('Буває, часом сліпну від краси', 'с');  // вертає 3

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

Специфікація Статус Коментар
ECMAScript 1st Edition (ECMA-262) Standard Початкова виознака.
ECMAScript 5.1 (ECMA-262)
The definition of 'String.prototype.indexOf' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'String.prototype.indexOf' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'String.prototype.indexOf' in that specification.
Draft  

Підтримка веб-переглядачами

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support Yes Yes1 Yes Yes Yes
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support Yes Yes Yes4 Yes Yes Yes

Див. також

Мітки документа й учасники

Зробили внесок у цю сторінку: asmforce
Востаннє оновлена: asmforce,