В чем разница методов для строки .slice() и .substr()
Оба метода работают схожим образом, они возвращают подстроку в заданном диапазоне:
const text = 'hexlet';
console.log(text.slice(1, 3)); // => ex
console.log(text.substr(1, 3)); // => exl
Метод slice
принимает первым параметром индекс, с которого начинается извлечение, а вторым индекс, по которому идёт извлечение.
Метод substr
первым параметром принимает тоже индекс, с которого идёт извлечение, а вторым параметром длину извлекаемой подстроки (поэтому в примере этот метод извлек на один символ больше).
Метод slice
более универсальный и работает также с массивами. Метод substr
считается устаревшим и не рекомендуется к использованию. Вместо него лучше использовать substring
- 'этот метод работает так же, как slice
.
Метод substr()
не является частью стандарта ECMAScript, а был добавлен в браузеры Netscape Navigator и Internet Explorer в далеком прошлом. В настоящее время он заменен на методы substring()
и slice()
, которые являются частью стандарта ECMAScript и поддерживаются всеми современными браузерами.
Во-вторых, метод substr()
имеет неоднозначное поведение при передаче отрицательных значений в качестве аргументов. Например, если передать отрицательное значение второго аргумента, то метод substr()
будет воспринимать его как индекс символа с конца строки, а не как количество символов, которые нужно извлечь. Это может привести к неожиданным результатам и ошибкам в коде.
Методы .slice()
и .substr()
используются для извлечения части строки, но у них есть различия.
Метод .slice()
:
- Принимает два аргумента: начальный индекс и конечный индекс, не включительно.
- Если конечный индекс не указан, то метод возвращает подстроку до конца строки.
- Можно указывать отрицательные индексы, которые отсчитываются с конца строки.
let str = "JavaScript";
console.log(str.slice(0, 4)); // "Java"
console.log(str.slice(4)); // "Script"
console.log(str.slice(-6)); // "Script"
Метод .substr()
:
- Принимает также два аргумента, но начальный индекс и длину подстроки.
- Также, если длина не указана, метод возвращает подстроку до конца строки.
- Можно указыать отрицательный начальный индекс, но не отрицательную длину.
let str = "JavaScript";
console.log(str.substr(0, 4)); // "Java"
console.log(str.substr(4)); // "Script"
console.log(str.substr(-6, 6)); // "Script"
Основное различие в том, что .slice()
использует начальный и конечный индексы, а .substr()
использует начальный индекс и длину.