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

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

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

и

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

Кажется, они оба выводят «ab».

вопрос задан 19.09.2010
Difference Engine
4127 репутация

8 ответов


  • 794 рейтинг

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

    Ссылки?

    https: // разработчик. Mozilla. org / ru / JavaScript / Reference / Global_Objects / String / substr

    https: // разработчик. Mozilla. org / ru / JavaScript / Reference / Global_Objects / String / substring

    ответ дан Delan Azabani, с репутацией 58429, 19.09.2010
  • 261 рейтинг

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

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

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

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

    ответ дан Colin Hebert, с репутацией 73135, 19.09.2010
  • 27 рейтинг

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

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

    от MDN :

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

    Итак, подведем итоги функциональных отличий:

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

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

    ответ дан JefferMC, с репутацией 418, 9.02.2015
  • 23 рейтинг

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

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

    ответ дан yatima2975, с репутацией 6077, 1.06.2011
  • 8 рейтинг

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

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

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

    Есть некоторые дополнительные тонкости между substr () и substring (), такие как обработка равных аргументов и отрицательных аргументов. Также обратите внимание, что 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"        
    
    ответ дан Nate Lipp, с репутацией 100, 9.03.2017
  • 7 рейтинг

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

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

    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'
    
    ответ дан CurnalCurz, с репутацией 71, 4.03.2016
  • 4 рейтинг

    Срез против Substr против Substring vs [] Методы

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

    ответ дан Ali007, с репутацией 333, 21.10.2013
  • -6 рейтинг

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

    ответ дан 5ervant, с репутацией 2252, 20.08.2016