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

в чем разница между

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

и

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

Они оба, похоже, выводят "ab".

8 ответов


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

ссылки?

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substr

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substring


substr (MDN) принимает параметры как (from, length).
substring (MDN) принимает параметры как (from, to).

alert("abc".substr(1,2)); // returns "bc"
alert("abc".substring(1,2)); // returns "b"

вы можете вспомнить substring принимает индексы, как и еще один способ извлечения строк, фрагмент.

при запуске с 0 вы можете использовать любой метод.


как намекнул в ответе ятима2975, есть дополнительная разница:

substr() принимает отрицательную начальную позицию в качестве смещения от конца строки. substring() нет.

С MDN:

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

Итак, чтобы суммировать функциональные различия:

substring(begin-offset, end-offset-exclusive) где begin-смещение 0 или больше

substr(begin-offset, length) где begin-offset также может быть отрицательным


другой gotcha я недавно столкнулся с тем, что в IE 8,"abcd".substr(-1) ошибочно возвращает "abcd", тогда как Firefox 3.6 возвращает "d" как и должно быть. slice работает правильно на обоих.

подробнее по этой теме можно найти здесь.


основное отличие в том, что

substr () позволяет указать максимальную длину для возврата

substring () позволяет указать индексы, а второй аргумент не включает

существуют некоторые дополнительные тонкости между substr() и substring (), такие как обработка равных аргументов и отрицательных аргументов. Также обратите внимание, что подстроки() и slice() похожи, но не всегда одинаковы.

  //*** length vs indices:
    "string".substring(2,4);  // "ri"   (start, end) indices / second value is NOT inclusive
    "string".substr(2,4);     // "ring" (start, length) length is the maximum length to return
    "string".slice(2,4);      // "ri"   (start, end) indices / second value is NOT inclusive

  //*** watch out for substring swap:
    "string".substring(3,2);  // "r"    (swaps the larger and the smaller number)
    "string".substr(3,2);     // "in"
    "string".slice(3,2);      // ""     (just returns "")

  //*** negative second argument:
    "string".substring(2,-4); // "st"   (converts negative numbers to 0, then swaps first and second position)
    "string".substr(2,-4);    // ""
    "string".slice(2,-4);     // ""

  //*** negative first argument:
    "string".substring(-3);   // "string"        
    "string".substr(-3);      // "ing"  (read from end of string)
    "string".slice(-3);       // "ing"        

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

при использовании подстроки второй параметр является первым индексом, который не включает:

var s = "string";
s.substring(1, 3); // would return 'tr'

var s = "another example";
s.substring(3, 7); // would return 'ther'

при использовании substr вторым параметром является количество символов для включения в подстроку:

var s = "string";
s.substr(1, 3); // would return 'tri'

var s = "another example";
s.substr(3, 7); // would return 'ther ex'

Slice vs Substr vs Substring vs [] методы

существуют преимущества производительности для каждого из этих методов javascript. Пожалуйста, используйте эти функции соответственно.


большая разница, substr() is устаревший метод что еще можно использовать, но следует использовать с осторожностью, поскольку они должны быть полностью удалены в будущем. Вы должны работать, чтобы удалить их использование из своего кода. И substring() метод выполнен успешно и указан первый.