В чем разница методов для строки .slice() и .substr() — Q&A Хекслет
2026-02-26 16:33 Diff

Ответы

Оба метода работают схожим образом, они возвращают подстроку в заданном диапазоне:

Метод slice принимает первым параметром индекс, с которого начинается извлечение, а вторым индекс, по которому идёт извлечение.

Метод substr первым параметром принимает тоже индекс, с которого идёт извлечение, а вторым параметром длину извлекаемой подстроки (поэтому в примере этот метод извлек на один символ больше).

Метод slice более универсальный и работает также с массивами. Метод substr считается устаревшим и не рекомендуется к использованию. Вместо него лучше использовать substring - 'этот метод работает так же, как slice.

Методы .slice() и .substr() используются для извлечения части строки, но у них есть различия.

Метод .slice():

  • Принимает два аргумента: начальный индекс и конечный индекс, не включительно.
  • Если конечный индекс не указан, то метод возвращает подстроку до конца строки.
  • Можно указывать отрицательные индексы, которые отсчитываются с конца строки.

Метод .substr():

  • Принимает также два аргумента, но начальный индекс и длину подстроки.
  • Также, если длина не указана, метод возвращает подстроку до конца строки.
  • Можно указыать отрицательный начальный индекс, но не отрицательную длину.

Основное различие в том, что .slice() использует начальный и конечный индексы, а .substr() использует начальный индекс и длину.

Метод substr() не является частью стандарта ECMAScript, а был добавлен в браузеры Netscape Navigator и Internet Explorer в далеком прошлом. В настоящее время он заменен на методы substring() и slice(), которые являются частью стандарта ECMAScript и поддерживаются всеми современными браузерами.

Во-вторых, метод substr() имеет неоднозначное поведение при передаче отрицательных значений в качестве аргументов. Например, если передать отрицательное значение второго аргумента, то метод substr() будет воспринимать его как индекс символа с конца строки, а не как количество символов, которые нужно извлечь. Это может привести к неожиданным результатам и ошибкам в коде.