substring() возвращает часть строки по индексам.
По задаче он похож на slice(), но работает немного иначе. Главные отличия: substring() не поддерживает отрицательные индексы и меняет аргументы местами, если start больше end.
Синтаксис
str.substring(start)
str.substring(start, end)
Метод вызывается у строки и возвращает новую строку.
Как работает substring()
const text = "JavaScript";
console.log(text.substring(0, 4)); // "Java"
console.log(text.substring(4)); // "Script"
Первый аргумент - индекс начала, второй - индекс конца.
Символ с индексом end в результат не входит.
const text = "hello";
console.log(text.substring(1, 4)); // "ell"
Если второй аргумент не передать
Если передать только start, строка будет взята от этого индекса до конца.
const text = "JavaScript";
console.log(text.substring(4)); // "Script"
Если start больше end
Если start больше end, substring() просто поменяет их местами.
const text = "hello";
console.log(text.substring(4, 1)); // "ell"
Это важное отличие от slice(), который в такой ситуации вернёт пустую строку.
Отрицательные индексы
substring() не поддерживает отрицательные индексы.
Если передать отрицательное число, оно будет воспринято как 0.
const text = "JavaScript";
console.log(text.substring(-3)); // "JavaScript"
console.log(text.substring(-3, 4)); // "Java"
Если нужна работа с концом строки, обычно удобнее использовать slice().
console.log(text.slice(-6)); // "Script"
Исходная строка не меняется
Строки в JavaScript неизменяемы, поэтому substring() не меняет исходную строку, а возвращает новое значение.
const text = "JavaScript";
const part = text.substring(0, 4);
console.log(text); // "JavaScript"
console.log(part); // "Java"
Если индексы выходят за диапазон
substring() не падает с ошибкой, если индекс выходит за пределы строки.
const text = "abc";
console.log(text.substring(0, 10)); // "abc"
console.log(text.substring(10)); // ""
Когда это полезно
substring() удобно использовать, когда:
- нужно взять часть строки по обычным индексам
- отрицательные индексы не нужны
- важно получить подстроку даже если аргументы случайно переданы в обратном порядке
Пример:
const code = "JS-2025";
console.log(code.substring(0, 2)); // "JS"
substring() и slice()
substring() и slice() часто решают одну и ту же задачу, но ведут себя по-разному.
Разница с отрицательными индексами
const text = "JavaScript";
console.log(text.substring(-6)); // "JavaScript"
console.log(text.slice(-6)); // "Script"
Разница при start > end
const text = "hello";
console.log(text.substring(4, 1)); // "ell"
console.log(text.slice(4, 1)); // ""
Если нужны отрицательные индексы и более предсказуемое поведение, обычно выбирают slice().
Частые ошибки
Ожидать, что substring() поддерживает отрицательные индексы
const text = "hello";
console.log(text.substring(-2)); // "hello"
Для работы с концом строки лучше использовать slice().
Забывать, что конечный индекс не включается
const text = "hello";
console.log(text.substring(1, 4)); // "ell"
Символ с индексом 4 в результат не попадёт.
Быстрая памятка
substring(start, end)возвращает часть строки- символ с индексом
endне включается - если
endне передать, строка берётся до конца - отрицательные индексы воспринимаются как
0 - если
start > end, метод меняет аргументы местами
Коротко
substring() - это метод строки в JavaScript, который возвращает часть строки по индексам. Он похож на slice(), но не поддерживает отрицательные индексы и автоматически меняет start и end местами, если они переданы в обратном порядке.