¿Cuál es la diferencia entre substr y substring?
Cuál es la diferencia entre
alert("abc".substr(0,2));
y
alert("abc".substring(0,2));
Ambos parecen generar "ab".
La diferencia está en el segundo argumento. El segundo argumento substring
es el índice en el que detenerse (pero no incluir), pero el segundo argumento substr
es la longitud máxima a devolver.
¿Enlaces?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring
substr
( MDN ) toma parámetros como (from, length)
.
substring
( MDN ) toma parámetros como (from, to)
.
Actualización : MDN considera substr
legado.
alert("abc".substr(1,2)); // returns "bc"
alert("abc".substring(1,2)); // returns "b"
Puede recordar que (con una i ) toma índices , al igual que otro método de extracción de cadenas, sl i ce (con una i ).substring
Al comenzar desde 0, puede utilizar cualquiera de los métodos.
Como se insinúa en la respuesta de yatima2975 , hay una diferencia adicional:
substr()
acepta una posición inicial negativa como un desplazamiento desde el final de la cadena. substring()
no es.
De MDN :
Si el inicio es negativo, substr() lo usa como índice de caracteres desde el final de la cadena.
Entonces, para resumir las diferencias funcionales:
substring(begin-offset, end-offset-exclusive)
donde el desplazamiento inicial es 0
o mayor
substr(begin-offset, length)
donde el desplazamiento inicial también puede ser negativo
La principal diferencia es que
substr()
le permite especificar la longitud máxima a devolversubstring()
le permite especificar los índices y el segundo argumento NO es inclusivo
Hay algunas sutilezas adicionales entre substr()
y substring()
como el manejo de argumentos iguales y argumentos negativos. También tenga en cuenta substring()
que slice()
son similares pero no siempre iguales.
//*** 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"
Otro problema con el que me encontré recientemente es que en IE 8, "abcd".substr(-1)
regresa erróneamente "abcd"
, mientras que Firefox 3.6 regresa "d"
como debería. slice
Funciona correctamente en ambos.
Puede encontrar más información sobre este tema aquí .