В чем разница между substr и substring?
Вопрос:
Какова разница между следующими двумя строками кода?
alert("abc".substr(0, 2));
и
alert("abc".substring(0, 2));
Обе строки, по-видимому, выводят "ab", но я не уверен, есть ли между ними какие-либо отличия в поведении или работе. Может ли кто-то объяснить, в чем заключается разница между методами substr
и substring
в JavaScript?
5 ответ(ов)
Разница заключается во втором аргументе. Второй аргумент метода substring
— это индекс, на котором нужно остановиться (но не включая его), в то время как второй аргумент метода substr
— это максимальная длина возвращаемой подстроки.
Вот ссылки на официальную документацию для подробностей:
Основное различие между substr()
и substring()
заключается в следующем:
substr()
позволяет указать максимальную длину возвращаемой строки.substring()
позволяет указать индексы, причем второй аргумент НЕ включается в результат.
Есть также дополнительные особенности между substr()
и substring()
, такие как обработка равных аргументов и отрицательных аргументов. Также стоит отметить, что substring()
и slice()
схожи, но не всегда ведут себя одинаково.
Пример кода для иллюстрации различий:
//*** длина vs индексы:
"string".substring(2, 4); // "ri" (индексы начала и конца) / второй аргумент НЕ включается
"string".substr(2, 4); // "ring" (индекс начала, длина) / длина — максимальная длина, которую нужно вернуть
"string".slice(2, 4); // "ri" (индексы начала и конца) / второй аргумент НЕ включается
//*** осторожно со сменой аргументов в substring:
"string".substring(3, 2); // "r" (меняет местами большее и меньшее число)
"string".substr(3, 2); // "in"
"string".slice(3, 2); // "" (возвращает "")
//*** отрицательный второй аргумент:
"string".substring(2, -4); // "st" (преобразует отрицательные числа в 0, затем меняет местами первый и второй аргумент)
"string".substr(2, -4); // ""
"string".slice(2, -4); // ""
//*** отрицательный первый аргумент:
"string".substring(-3); // "string"
"string".substr(-3); // "ing" (читает с конца строки)
"string".slice(-3); // "ing"
Таким образом, substr()
, substring()
и slice()
имеют свои уникальные особенности и поведение, которые важно учитывать при использовании.
Разница заключается во втором параметре. Оба метода принимают вторым параметром число, но ожидают разные вещи:
При использовании метода substring
второй параметр указывает на первый индекс, который не включается в результат:
var s = "строка";
s.substring(1, 3); // вернет 'тро'
var s = "другой пример";
s.substring(3, 7); // вернет 'гой '
При использовании метода substr
второй параметр указывает количество символов, которые следует включить в подстроку:
var s = "строка";
s.substr(1, 3); // вернет 'тро'
var s = "другой пример";
s.substr(3, 7); // вернет 'гой при'
Таким образом, substring
и substr
работают по-разному с индексами и количеством символов, которые они возвращают.
Метод substring() в JavaScript принимает два параметра: "start" и "end".
- Параметр start является обязательным и указывает позицию, с которой начинается извлечение подстроки.
- Параметр end является необязательным и указывает позицию, на которой должно завершиться извлечение.
Если параметр end не указан, извлекаются все символы с позиции start до конца строки.
var str = "Substring Example";
var result = str.substring(0, 10);
alert(result);
Вывод: Substring
Если значение параметра start больше значения параметра end, метод поменяет местами два аргумента. Это означает, что start будет использоваться как end, а end как start.
var str = "Substring Example";
var result = str.substring(10, 0);
alert(result);
Вывод: Substring
Метод substr() также принимает два параметра: "start" и "count".
- Параметр start является обязательным и указывает позицию, с которой начинается извлечение.
- Параметр count является необязательным и указывает количество символов для извлечения.
var str = "Substr Example";
var result = str.substr(0, 10);
alert(result);
Вывод: Substr Exa
Если параметр count не указан, будут извлечены все символы от стартовой позиции до конца строки. Если count равен 0 или отрицательному значению, будет возвращена пустая строка.
var str = "Substr Example";
var result = str.substr(11);
alert(result);
Вывод: ple
В JavaScript есть два метода для получения подстроки: substring
и substr
, и у них разные механизмы работы с индексами.
Метод substring(startIndex, endIndex)
принимает два аргумента:
startIndex
: Начальный индекс (включительно).endIndex
: Конечный индекс (не включая).
Пример:
const string = 'JavaScript';
console.log('substring(1,2)', string.substring(1,2)); // вернет 'a'
В этом случае метод substring
извлекает символ с индексом 1 (второй символ 'a') и прекращает на символе с индексом 2 (который не включается), поэтому результат - 'a'.
Метод substr(startIndex, howManyCharacters)
работает немного иначе:
startIndex
: Начальный индекс (включительно).howManyCharacters
: Количество символов для извлечения.
Пример:
console.log('substr(1,2)', string.substr(1,2)); // вернет 'av'
Здесь метод substr
берёт символ с индексом 1 (второй символ 'a') и извлекает 2 символа, поэтому результатом будет 'av'.
Таким образом, главное различие между substring
и substr
заключается в том, как вы задаете конечные параметры для извлечения подстроки: substring
использует индекс, где заканчивается извлечение, тогда как substr
использует количество символов, которое нужно извлечь.
Как проверить, содержит ли строка подстроку в JavaScript?
Как проверить, содержит ли строка подстроку?
В чем разница между String.slice и String.substring?
Существует ли ссылка на "последнюю" библиотеку jQuery в Google APIs?
Как создать диалог с кнопками "Ок" и "Отмена"