Qual é a diferença entre substr e substring?

Qual é a diferença entre

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

e

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

Ambos parecem produzir “ab”.

A diferença está no segundo argumento. O segundo argumento para substring é o índice para parar em (mas não include), mas o segundo argumento para substr é o tamanho máximo a ser retornado.

Links?

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

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

substr ( MDN ) aceita parâmetros como (from, length) .
substring ( MDN ) recebe parâmetros como (from, to) .

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

Você pode se lembrar de substring leva índices, como ainda outro método de extração de seqüência de caracteres, fatia .

Ao iniciar a partir de 0, você pode usar um dos methods.

Como sugerido na resposta de yatima2975, há uma diferença adicional:

substr() aceita uma posição inicial negativa como um deslocamento do final da string. substring() não.

De MDN :

Se start for negativo, substr () o usará como um índice de caractere no final da string.

Então, para resumir as diferenças funcionais:

substring(begin-offset, end-offset-exclusive) que begin-offset é 0 ou maior

substr(begin-offset, length) onde begin-offset também pode ser negativo

Outra pegadinha que eu recentemente descobri é que no IE 8, "abcd".substr(-1) erroneamente retorna "abcd" , enquanto o Firefox 3.6 retorna "d" como deveria. slice funciona corretamente em ambos.

Mais sobre este assunto pode ser encontrado aqui .

A diferença é o segundo parâmetro. Seus segundos parâmetros, enquanto ambos os números, estão esperando duas coisas diferentes:

Ao usar substring, o segundo parâmetro é o primeiro índice a não include:

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

Ao usar substr, o segundo parâmetro é o número de caracteres a serem incluídos na substring:

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

A principal diferença é que

substr () permite que você especifique o comprimento máximo para retornar

substring () permite que você especifique os índices e o segundo argumento NÃO é inclusivo

Existem algumas sutilezas adicionais entre substr () e substring (), como o tratamento de argumentos iguais e argumentos negativos. Observe também que substring () e slice () são semelhantes, mas nem sempre são os mesmos.

  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); // "" 

Slice vs Substr vs Substring vs [] Métodos

Existem benefícios de desempenho para cada um desses methods de javascript. Por favor, use estas funções em conformidade.

A grande diferença é que substr() é um método obsoleto que ainda pode ser usado, mas deve ser usado com caucanvas, pois espera-se que sejam removidos inteiramente no futuro. Você deve trabalhar para remover o uso deles do seu código. E o método substring() teve sucesso e especificou o primeiro.