2010-09-19 7 views
653

Qual è la differenza traQual è la differenza tra substr e substring?

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

e

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

Entrambi sembrano uscita “ab”.

+17

Ci [sembra esserci alcuna ragione] (http://www.bennadel.com/blog/2159-Using-Slice-Substring-And-Substr-In-Javascript.htm) per usare 'substring' A quest'ora. Usa invece 'slice'. –

+10

@Derek 朕 會 功夫 Nota, 'sottostringa' [supera tutte le altre su Chrome] (http://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/22). –

+2

Aggiunta al commento @Derek ... A differenza del metodo 'slice',' substring' non gestisce la regolazione dei parametri negativi. –

risposta

707

La differenza è nel secondo argomento. Il secondo argomento su substring è l'indice da interrompere (ma non includere), ma il secondo argomento su substr è la lunghezza massima da restituire.

Collegamenti?

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

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

+48

Sembra una fonte comune di errore. Buono a sapersi la differenza. Abbiamo trovato ulteriori commenti a riguardo qui: http://rapd.wordpress.com/2007/07/12/javascript-substr-vs-substring/ – schnaader

+25

Quindi, quando si parte da 0, è possibile utilizzare entrambi i metodi. – Pawel

+6

quale è più efficiente? Dimostrazione – eagor

230

substr (MDN) batte parametri (from, length).
substring (MDN) assume i parametri come (from, to).

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

Si può ricordare substring prende indici, come fa ancora un altro metodo di estrazione di stringa, slice.

Quando si parte da 0 è possibile utilizzare uno dei due metodi.

+86

'.substring()' prende gli indici. Puoi ricordare perché è l'unico con una "i" nel nome. '.slice()' accetta anche gli indici. – colllin

+6

@colllin, quel commento sugli i e sugli indizi sicuramente dovrebbe essere spostato nella risposta! – MyDaftQuestions

20

Un altro trucco che ho riscontrato di recente è che in IE 8, "abcd".substr(-1) restituisce erroneamente "abcd", mentre Firefox 3.6 restituisce "d" come dovrebbe. slice funziona correttamente su entrambi.

Maggiori informazioni su questo argomento sono disponibili here.

4

Slice vs Substr vs Substring vs [ ] Methods

ci sono vantaggi prestazionali a ciascuno di questi metodi javascript. Si prega di utilizzare queste funzioni di conseguenza.

+6

Questa risposta sarebbe migliore se includesse qui del testo riassuntivo sui risultati dei benefici legati alle prestazioni, per favore. – jtheletter

20

come suggerito nella risposta di yatima2975, v'è un'ulteriore differenza:

substr() accetta una posizione iniziale negativo come offset dalla fine della stringa. substring() no.

Da MDN:

Se start è negativo, substr() utilizza come indice di carattere dalla fine della stringa.

Quindi, per riassumere le differenze funzionali:

substring(begin-offset, end-offset-exclusive) dove iniziano-offset è 0 o superiore

substr(begin-offset, length) dove iniziano-offset può anche essere negativa

6

La differenza è secondo parametro.Le loro secondo parametro, mentre entrambi i numeri, si aspettano due cose diverse:

Quando si utilizza sottostringa il secondo parametro è il primo indice di non includere:

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

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

Quando si utilizza substr il secondo parametro è il numero di caratteri da includere nella stringa:

var s = "string"; 
s.substr(1, 3); // would return 'tri' 

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

tali numeri molto leet wow –

-4

la grande differenza è, substr() è un metodo deprecato che può ancora essere utilizzato, ma dovrebbe essere usato con cautela bec ause dovrebbero essere rimossi completamente in futuro. Dovresti lavorare per rimuovere il loro uso dal tuo codice. E il metodo substring() ha avuto successo e ha specificato il precedente.

+1

Puoi puntare a una fonte affidabile che indichi la deprecazione di 'substr()'? L'ho letto da diverse persone, ma non riesco a trovare alcuna informazione sul web che supporti la dichiarazione. Inoltre, Mozilla non lo include nell'elenco delle funzionalità deprecate/obsolete: https: //developer.mozilla.org/it-it/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features – DanielM

+0

@DanielM Per quanto mi ricordo, è stato deprecato quando ho postato questa risposta, forse l'articolo è cambiato e non è ora deprecato * (ma non è sicuro) *. Ma ancora registrato su alcuni articoli come in http://sstut.com/javascript/substring-method.php come deprecato. – 5ervant

4

La differenza principale è che

substr() consente di specificare la lunghezza massima di restituire

substring() consente di specificare gli indici e il secondo argomento non è comprensivo

Ci ci sono alcune sottigliezze aggiuntive tra substr() e substring() come la gestione di argomenti uguali e argomenti negativi. Nota anche la sottostringa() e slice() sono simili ma non sempre gli stessi.

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