10

В чем разница между substr и substring?

8

Вопрос:

Какова разница между следующими двумя строками кода?

alert("abc".substr(0, 2));

и

alert("abc".substring(0, 2));

Обе строки, по-видимому, выводят "ab", но я не уверен, есть ли между ними какие-либо отличия в поведении или работе. Может ли кто-то объяснить, в чем заключается разница между методами substr и substring в JavaScript?

5 ответ(ов)

11

Разница заключается во втором аргументе. Второй аргумент метода substring — это индекс, на котором нужно остановиться (но не включая его), в то время как второй аргумент метода substr — это максимальная длина возвращаемой подстроки.

Вот ссылки на официальную документацию для подробностей:

0

Основное различие между 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() имеют свои уникальные особенности и поведение, которые важно учитывать при использовании.

0

Разница заключается во втором параметре. Оба метода принимают вторым параметром число, но ожидают разные вещи:

При использовании метода 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 работают по-разному с индексами и количеством символов, которые они возвращают.

0

Метод 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

0

В 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 использует количество символов, которое нужно извлечь.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь