indexOf() ищет подстроку в строке и возвращает индекс её первого вхождения.
Если подстрока не найдена, метод вернёт -1.
Синтаксис
str.indexOf(searchString)
str.indexOf(searchString, position)
Метод вызывается у строки и возвращает число.
Как работает indexOf()
const text = "JavaScript";
console.log(text.indexOf("Script")); // 4
console.log(text.indexOf("Java")); // 0
console.log(text.indexOf("Python")); // -1
Метод возвращает индекс первого совпадения, а не true или false.
Позиция начала поиска
Во втором аргументе можно указать, с какого индекса начинать поиск.
const text = "banana";
console.log(text.indexOf("a")); // 1
console.log(text.indexOf("a", 2)); // 3
console.log(text.indexOf("a", 4)); // 5
Это полезно, если нужно искать дальше по строке после первого совпадения.
Если подстрока не найдена
Если совпадения нет, indexOf() вернёт -1.
const text = "JavaScript";
console.log(text.indexOf("TypeScript")); // -1
Именно поэтому раньше часто писали проверки в таком виде:
const text = "JavaScript";
console.log(text.indexOf("Script") !== -1); // true
Регистр важен
indexOf() чувствителен к регистру.
const text = "JavaScript";
console.log(text.indexOf("java")); // -1
console.log(text.indexOf("Java")); // 0
Если нужен поиск без учёта регистра, строку обычно заранее приводят к одному формату.
const text = "JavaScript";
console.log(text.toLowerCase().indexOf("java")); // 0
Когда это полезно
indexOf() удобно использовать, когда:
- нужно узнать позицию подстроки
- важно получить именно индекс, а не
trueилиfalse - нужно найти первое вхождение в строке
Пример:
const email = "user@gmail.com";
console.log(email.indexOf("@")); // 4
indexOf() и includes()
includes() отвечает только на вопрос “есть или нет”, а indexOf() возвращает позицию.
const text = "JavaScript";
console.log(text.includes("Script")); // true
console.log(text.indexOf("Script")); // 4
Если нужен именно индекс, используют indexOf(). Если нужна простая проверка наличия, обычно удобнее includes().
Если подстрока пустая
Пустая строка считается найденной.
const text = "hello";
console.log(text.indexOf("")); // 0
console.log(text.indexOf("", 2)); // 2
Частые ошибки
Проверять результат как boolean
Такой код может работать неправильно:
const text = "JavaScript";
if (text.indexOf("Java")) {
console.log("Найдено");
}
Проблема в том, что indexOf("Java") вернёт 0, а 0 в условии - это falsy.
Правильно так:
const text = "JavaScript";
if (text.indexOf("Java") !== -1) {
console.log("Найдено");
}
Или проще:
console.log(text.includes("Java")); // true
Забывать про регистр
const text = "JavaScript";
console.log(text.indexOf("javascript")); // -1
Если нужен поиск без учёта регистра, лучше заранее использовать toLowerCase() или toUpperCase().
Быстрая памятка
indexOf(searchString)возвращает индекс первого вхождения- если подстрока не найдена, метод вернёт
-1 - можно указать позицию начала поиска
- поиск чувствителен к регистру
- если нужна только проверка наличия,
includes()обычно читается проще
Коротко
indexOf() - это метод строки в JavaScript, который ищет подстроку и возвращает индекс её первого вхождения. Он полезен, когда нужно не просто проверить наличие текста, а узнать его точную позицию в строке.