substr() возвращает часть строки, начиная с указанной позиции и длиной в заданное количество символов.
Этот метод долго использовали в JavaScript, но сейчас он считается устаревшим. В новом коде обычно предпочитают slice() или substring().
Синтаксис
str.substr(start)
str.substr(start, length)
Метод вызывается у строки и возвращает новую строку.
Как работает substr()
const text = "JavaScript";
console.log(text.substr(4, 6)); // "Script"
console.log(text.substr(0, 4)); // "Java"
Первый аргумент - позиция начала, второй - длина результата.
Это главное отличие от slice() и substring(), где второй аргумент - обычно индекс конца, а не длина.
Если второй аргумент не передать
Если length не передать, строка будет взята от start до конца.
const text = "JavaScript";
console.log(text.substr(4)); // "Script"
Отрицательные индексы
substr() поддерживает отрицательный start.
Это значит, что можно считать позицию с конца строки:
const text = "JavaScript";
console.log(text.substr(-6)); // "Script"
console.log(text.substr(-6, 3)); // "Scr"
Это делает substr() похожим на slice(), но логика второго аргумента всё равно остаётся другой.
Исходная строка не меняется
Строки в JavaScript неизменяемы, поэтому substr() не меняет исходную строку, а возвращает новое значение.
const text = "JavaScript";
const part = text.substr(0, 4);
console.log(text); // "JavaScript"
console.log(part); // "Java"
Если аргументы выходят за диапазон
substr() не падает с ошибкой, если значения выходят за пределы строки.
const text = "abc";
console.log(text.substr(0, 10)); // "abc"
console.log(text.substr(10, 2)); // ""
console.log(text.substr(-10, 2)); // "ab"
Если длина равна 0 или меньше, результатом будет пустая строка.
const text = "hello";
console.log(text.substr(1, 0)); // ""
console.log(text.substr(1, -2)); // ""
Когда это полезно
substr() может встретиться, когда:
- вы читаете старый JavaScript-код
- нужно быстро взять подстроку по позиции и длине
- проект уже использует этот метод и вы хотите понимать его поведение
Пример:
const phone = "+79991234567";
console.log(phone.substr(0, 2)); // "+7"
substr() и slice()
substr() и slice() похожи, но второй аргумент у них означает разное.
const text = "JavaScript";
console.log(text.substr(4, 3)); // "Scr"
console.log(text.slice(4, 7)); // "Scr"
У substr(4, 3) число 3 означает длину, а у slice(4, 7) число 7 означает конечный индекс.
substr() и substring()
substring() не работает с длиной и не поддерживает отрицательные индексы так же, как substr().
const text = "JavaScript";
console.log(text.substr(4, 3)); // "Scr"
console.log(text.substring(4, 7)); // "Scr"
По результату это может выглядеть похоже, но смысл аргументов разный.
Почему substr() считается устаревшим
substr() считается legacy-методом. Это значит, что он всё ещё встречается и обычно работает в браузерах, но для нового кода его обычно не рекомендуют.
Чаще всего вместо него выбирают:
slice()- если нужна часть строки по индексамsubstring()- если проект уже использует такой стиль
На практике slice() обычно самый понятный и предсказуемый вариант.
Частые ошибки
Путать второй аргумент с конечным индексом
const text = "hello";
console.log(text.substr(1, 3)); // "ell"
Число 3 здесь означает длину, а не индекс конца.
Забывать, что метод устаревший
substr() полезно знать для чтения чужого кода, но в новом коде чаще выбирают slice().
Быстрая памятка
substr(start, length)возвращает часть строки- второй аргумент - это длина, а не конечный индекс
substr()поддерживает отрицательныйstart- исходная строка не меняется
- метод считается устаревшим, и в новом коде чаще используют
slice()
Коротко
substr() - это устаревший метод строки в JavaScript, который возвращает подстроку по позиции и длине. Его полезно знать для чтения старого кода, но в новых проектах обычно используют slice() или substring().