¿Alguien sabe cuál es la diferencia entre estos dos métodos?
String.prototype.slice
String.prototype.substring
javascript
substring
slice
substr
tmim
fuente
fuente
slice
es el que tiene el comportamiento menos inesperado.slice
realidad puede reemplazarlosubstring
y no hay razón para usarlo.var a = "asdf".substring(-1);
, se trata comovar a = "asdf".substring(0);
. No hay excepción lanzada. Y si lo usavar a = "asdf".substring(2, -1);
, lo usa0
en lugar de-1
(como antes), y cambia los argumentos para que actúe comovar a = "asdf".substring(0, 2);
. Incluso probé estos en IE 8 y obtuve los resultados sin excepcionesRespuestas:
slice()
funciona comosubstring()
con algunos comportamientos diferentes.Lo que tienen en común:
start
es igualstop
: devuelve una cadena vacíastop
se omite: extrae caracteres al final de la cadenaDistinciones de :
substring()
start > stop
, entoncessubstring
intercambiará esos 2 argumentos.NaN
, se trata como si lo fuera0
.Distinciones de :
slice()
start > stop
,slice()
devolverá la cadena vacía. (""
)start
es negativo: establece char desde el final de la cadena, exactamente comosubstr()
en Firefox. Este comportamiento se observa tanto en Firefox como en IE.stop
es negativo: establece stop a:string.length – Math.abs(stop)
(valor original), excepto limitado a 0 (por lo tantoMath.max(0, string.length + stop)
) como se cubre en la especificación ECMA .Fuente: Arte rudimentario de programación y desarrollo: Javascript: substr () vs substring ()
fuente
slice()
, debería serstring.length - stop
slice()
, creo que debería ser(string.length – 1) + stop
o, para que quede claro que es negativo,(string.length – 1) – Math.abs(stop)
String.slice
se agregó para que haya un método de cadena coherente conArray.slice
.substring
ha estado allí para siempre, por lo que no lo rompieron y agregaron otro método. Difícilmente una mala decisión como 1. la consistencia es agradable y 2. permite que la sintaxis de corte de CoffeeScript funcione en matrices y cadenas. @Oriol: lo editó.stop
se establecerá enstring.length + stop
sistop
es negativo. ¡Recuerde questop
es el índice después del último carácter extraído!Nota: si tiene prisa y / o busca una respuesta corta, desplácese hasta el final de la respuesta y lea las dos últimas líneas. Si no tiene prisa, lea todo.
permítanme comenzar declarando los hechos:
Sintaxis:
string.slice(start,end)
string.substr(start,length)
string.substring(start,end)
Nota # 1:
slice()==substring()
¿Que hace?
El
slice()
método extrae partes de una cadena y devuelve las partes extraídas en una nueva cadena.El
substr()
método extrae partes de una cadena, comenzando en el carácter en la posición especificada, y devuelve el número especificado de caracteres.El
substring()
método extrae partes de una cadena y devuelve las partes extraídas en una nueva cadena.Nota 2:
slice()==substring()
Cambia la cadena original?
slice()
Nosubstr()
hace Nosubstring()
hace NoNota # 3:
slice()==substring()
Uso de números negativos como argumento:
slice()
selecciona caracteres que comienzan desde el final de la cadenasubstr()
selecciona caracteres que comienzan desde el final de la cadenasubstring()
No realiza lanota # 3:
slice()==substr()
si el primer argumento es mayor que el segundo:
slice()
no se realizasubstr()
ya que el segundo argumento NO es una posición, sino un valor de longitud, funcionará como de costumbre, sin problemassubstring()
intercambiará los dos argumentos y funcionará como de costumbreel primer argumento:
slice()
obligatorio, indica: índice inicialsubstr()
obligatorio, indica: índice inicialsubstring()
obligatorio, indica: índice inicialNota # 4:
slice()==substr()==substring()
El segundo argumento:
slice()
Opcional, La posición (hasta, pero sin incluir) dónde finalizar la extracciónsubstr()
Opcional, El número de caracteres para extraersubstring()
Opcional, La posición (hasta, pero sin incluir) donde finalizar la extracciónNota # 5:
slice()==substring()
¿Qué pasa si se omite el segundo argumento?
slice()
selecciona todos los caracteres desde la posición inicial hasta el final de la secuenciasubstr()
selecciona todos los caracteres desde la posición inicial hasta el final de la secuenciasubstring()
selecciona todos los caracteres desde la posición inicial hasta el final de la secuenciaNota # 6:
slice()==substr()==substring()
entonces, puedes decir que hay una diferencia entre
slice()
ysubstr()
, mientras quesubstring()
es básicamente una copia deslice()
.en resumen:
si conoce el índice (la posición) en el que se detendrá (pero NO lo incluirá), use
slice()
si conoce la longitud de los caracteres que se extraerán
substr()
.fuente
Ben Nadel ha escrito un buen artículo sobre esto, señala la diferencia en los parámetros de estas funciones:
También señala que si los parámetros para cortar son negativos, hacen referencia a la cadena desde el final. Subcadena y subcadena no.
Aquí está su artículo sobre esto.
fuente
'0123456789'.substr(-3, 2) -> '78'
La única respuesta está bien, pero requiere un poco de lectura. Especialmente con la nueva terminología "stop".
My Go: organizado por diferencias para que sea útil además de la primera respuesta de Daniel anterior:
1) índices negativos. La subcadena requiere índices positivos y establecerá un índice negativo en 0. El índice negativo de Slice significa la posición desde el final de la cadena.
2) Intercambio de índices. La subcadena reordenará los índices para que el primer índice sea menor o igual que el segundo índice.
--------------------------
Comentario general: me parece extraño que el segundo índice sea la posición después del último carácter de la porción o subcadena. Esperaría que "1234" .slice (2,2) devuelva "3". Esto justifica la confusión de Andy: esperaría que "1234" .slice (2, -1) devuelva "34". Sí, esto significa que soy nuevo en Javascript. Esto significa también este comportamiento:
Mi 2c.
fuente
La diferencia entre la subcadena y el corte es cómo funcionan con argumentos negativos y con líneas pasadas en el extranjero:
subcadena (inicio, fin)
Los argumentos negativos se interpretan como cero. Los valores demasiado grandes se truncan a la longitud de la cadena: alert ("testme" .substring (-2)); // "testme", -2 se convierte en 0
Además, si inicio> fin, los argumentos se intercambian, es decir, la línea de trazado regresa entre el inicio y el final:
rebanada
Los valores negativos se miden desde el final de la línea:
Es mucho más conveniente que la extraña subcadena lógica.
Un valor negativo del primer parámetro para substr admitido en todos los navegadores, excepto IE8-.
Si elige uno de estos tres métodos, para usar en la mayoría de las situaciones, será una rebanada : argumentos negativos y mantiene y opera de manera más obvia.
fuente
substr: nos proporciona recuperar parte de la cadena en función del índice especificado. sintaxis de substr- string.substr (inicio, fin) inicio: el índice de inicio indica dónde comienza la recuperación. end: el índice final indica hasta dónde se obtiene la cadena. Es opcional.
rebanada: proporciona obtener parte de la cadena en función del índice especificado. Nos permite especificar positivo e índice. sintaxis de slice - string.slice (start, end) start - start index indica dónde comienza la recuperación. Es end - end index indica hasta dónde recupera la cadena. Es opcional. En 'empalme', tanto el índice inicial como el final ayudan a tomar índices positivos y negativos.
código de muestra para 'corte' en cadena
código de muestra para 'subcadena' en cadena
[* Nota: la indexación negativa comienza al final de la cadena.]
fuente
La única diferencia entre el método de división y subcadena es de argumentos
Ambos toman dos argumentos, por ejemplo, inicio / desde y final / hasta.
No se puede pasar un valor negativo como primer argumento para la subcadena método, pero para rebanada método para atravesar de un extremo.
Detalles del argumento del método de corte:
REF: http://www.thesstech.com/javascript/string_slice_method
Argumentos
start_index Índice desde donde debe comenzar el sector. Si el valor se proporciona en negativo, significa comenzar desde el último. por ejemplo, -1 para el último personaje. end_index Índice después del final del segmento. Si no se proporciona, el segmento se tomará desde start_index hasta el final de la cadena. En caso de valor negativo, el índice se medirá desde el final de la cadena.
Detalles del argumento del método de subcadena:
REF: http://www.thesstech.com/javascript/string_substring_method
Argumentos
de que debe ser un número entero no negativo para especificar el índice desde donde subcadena debe comenzar. a Un entero opcional no negativo para proporcionar un índice antes del cual se debe terminar la subcadena.
fuente
Para
slice(start, stop)
, sistop
es negativo,stop
se establecerá en:más bien que:
fuente