Learn JavaScript

substr() - устаревший метод для получения части строки в JavaScript

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().