Основное отличие состоит в том, что
substr () позволяет указать максимальную длину для возврата
substring () позволяет вам указывать индексы, а второй аргумент НЕ включен
Существуют некоторые дополнительные тонкости между substr () и substring (), такие как обработка равных аргументов и отрицательных аргументов. Также обратите внимание, что substring () и slice () аналогичны, но не всегда одинаковы.
length vs indices
"string".substr(2,4); // "ring" (start, length) length is the maximum length to return
"string".substring(2,4); // "ri" (start, end) indices / second value is NOT inclusive
"string".slice(2,4); // "ri" (start, end) indices / second value is NOT inclusive
watch out for substring swap
"string".substr(3,2); // "in"
"string".substring(3,2); // "r" (swaps the larger and the smaller number)
"string".slice(3,2); // "" (just returns "")
handling negative arguments
"string".substr(2,-4); // ""
"string".substring(2,-4); // "st" (converts negative numbers to 0, then swaps first and second position)
"string".slice(2,-4); // ""