Weiß jemand, was der Unterschied zwischen diesen beiden Methoden ist?
String.prototype.slice
String.prototype.substring
javascript
substring
slice
substr
tmim
quelle
quelle
slice
ist derjenige mit dem am wenigsten unerwarteten Verhalten.slice
kann tatsächlich ersetzensubstring
und es gibt keinen Grund , es zu benutzen.var a = "asdf".substring(-1);
, wird es wie behandeltvar a = "asdf".substring(0);
. Es wird keine Ausnahme geworfen. Und wenn Sie verwendenvar a = "asdf".substring(2, -1);
, wird0
anstelle von-1
(wie zuvor) verwendet und die Argumente werden so ausgetauscht, dass sie sich wie folgt verhaltenvar a = "asdf".substring(0, 2);
. Ich habe diese sogar auf IE 8 ausprobiert und die Ergebnisse ohne Ausnahmen erhaltenAntworten:
slice()
funktioniert wiesubstring()
mit ein paar verschiedenen Verhaltensweisen.Was sie gemeinsam haben:
start
gleichstop
: gibt eine leere Zeichenfolge zurückstop
weggelassen wird: Extrahiert Zeichen bis zum Ende der ZeichenfolgeUnterscheidungen von :
substring()
start > stop
, dannsubstring
werden diese beiden Argumente ausgetauscht.NaN
, wird es so behandelt, als ob es wäre0
.Unterscheidungen von :
slice()
start > stop
,slice()
wird die leere Zeichenkette zurück. (""
)start
ist negativ: Setzt char am Ende des Strings, genau wiesubstr()
in Firefox. Dieses Verhalten wird sowohl in Firefox als auch in IE beobachtet.stop
negativ: Setzt Stop auf:string.length – Math.abs(stop)
(ursprünglicher Wert), außer bei 0 (alsoMath.max(0, string.length + stop)
), wie in der ECMA-Spezifikation beschrieben .Quelle: Rudimentäre Kunst der Programmierung und Entwicklung: Javascript: substr () vs substring ()
quelle
slice()
sollte es seinstring.length - stop
slice()
, denke ich, sollte es sein(string.length – 1) + stop
oder, um klar zu machen, dass es negativ ist,(string.length – 1) – Math.abs(stop)
String.slice
wurde hinzugefügt, damit es eine konsistente String-Methode gibtArray.slice
.substring
war schon immer da, also haben sie es nicht gebrochen und eine andere Methode hinzugefügt. Kaum eine beschissene Entscheidung, da 1. Konsistenz gut ist und 2. die Slicing-Syntax von CoffeeScript für Arrays und Strings geeignet ist. @Oriol: bearbeitet es in.stop
wird aufstring.length + stop
if gesetzt, wennstop
negativ ist. Denken Sie daran,stop
ist der Index nach dem letzten extrahierten Zeichen!Hinweis: Wenn Sie es eilig haben und / oder nach einer kurzen Antwort suchen, scrollen Sie zum Ende der Antwort und lesen Sie die letzten beiden Zeilen. Wenn Sie es nicht eilig haben, lesen Sie das Ganze.
Lassen Sie mich zunächst die Fakten darlegen:
Syntax:
string.slice(start,end)
string.substr(start,length)
string.substring(start,end)
Anmerkung 1:
slice()==substring()
Was es macht?
Die
slice()
Methode extrahiert Teile einer Zeichenfolge und gibt die extrahierten Teile in einer neuen Zeichenfolge zurück.Die
substr()
Methode extrahiert Teile einer Zeichenfolge, beginnend mit dem Zeichen an der angegebenen Position, und gibt die angegebene Anzahl von Zeichen zurück.Die
substring()
Methode extrahiert Teile einer Zeichenfolge und gibt die extrahierten Teile in einer neuen Zeichenfolge zurück.Anmerkung 2:
slice()==substring()
Ändert die ursprüngliche Zeichenfolge?
slice()
Nichtsubstr()
nichtsubstring()
NichtAnmerkung # 3:
slice()==substring()
Negative Zahlen als Argument verwenden:
slice()
Wählt Zeichen ab dem Ende der Zeichenfolge aus.substr()
Wählt Zeichen ab dem Ende der Zeichenfolge aus.substring()
Funktion3 wird nicht ausgeführt. Hinweis 3:
slice()==substr()
Wenn das erste Argument größer als das zweite ist: Wird
slice()
nicht ausgeführt,substr()
da das zweite Argument KEINE Position, sondern ein Längenwert ist. Es wird wie gewohnt ausgeführt, ohne Problemesubstring()
werden die beiden Argumente ausgetauscht und wie gewohnt ausgeführtDas erste Argument:
slice()
Erforderlich, zeigt an: Startindexsubstr()
erforderlich, zeigt an: Startindexsubstring()
erforderlich, zeigt an: StartindexHinweis Nr. 4:
slice()==substr()==substring()
das zweite Argument:
slice()
Optional, Die Position (bis zu, aber nicht einschließlich), an der die Extraktion beendet werden sollsubstr()
Optional, Die Anzahl der zu extrahierenden Zeichensubstring()
Optional, Die Position (bis zu, aber nicht einschließlich), an der die Extraktion beendet werden sollHinweis Nr. 5:
slice()==substring()
Was ist, wenn das zweite Argument weggelassen wird?
slice()
Wählt alle Zeichen von der Startposition bis zum Ende der Zeichenfolge aus.substr()
Wählt alle Zeichen von der Startposition bis zum Ende der Zeichenfolge aus.substring()
Wählt alle Zeichen von der Startposition bis zum Ende der Zeichenfolge aus.Hinweis 6:
slice()==substr()==substring()
Man kann also sagen, dass es einen Unterschied zwischen
slice()
und gibtsubstr()
, währendsubstring()
es sich im Grunde um eine Kopie von handeltslice()
.in Zusammenfassung:
Wenn Sie den Index (die Position) kennen, an dem Sie anhalten (aber NICHT einschließen), verwenden
slice()
Sie, wenn Sie die Länge der zu extrahierenden Zeichen kennen
substr()
.quelle
Ben Nadel hat einen guten Artikel darüber geschrieben, er weist auf den Unterschied in den Parametern zu diesen Funktionen hin:
Er weist auch darauf hin, dass die zu schneidenden Parameter negativ auf die Zeichenfolge vom Ende verweisen. Teilstring und Substrat nicht.
Hier ist sein Artikel darüber.
quelle
'0123456789'.substr(-3, 2) -> '78'
Die eine Antwort ist in Ordnung, erfordert aber ein wenig Einlesen. Besonders mit der neuen Terminologie "Stop".
My Go - organisiert nach Unterschieden, um es zusätzlich zu der ersten Antwort von Daniel oben nützlich zu machen:
1) negative Indizes. Die Teilzeichenfolge erfordert positive Indizes und setzt einen negativen Index auf 0. Der negative Index von Slice bedeutet die Position vom Ende der Zeichenfolge.
2) Austausch von Indizes. Durch Teilzeichenfolge werden die Indizes neu angeordnet, sodass der erste Index kleiner oder gleich dem zweiten Index ist.
--------------------------
Allgemeiner Kommentar - Ich finde es seltsam, dass der zweite Index die Position nach dem letzten Zeichen des Slice oder Teilstrings ist. Ich würde erwarten, dass "1234" .slice (2,2) "3" zurückgibt. Dies macht Andys Verwirrung oben gerechtfertigt - ich würde erwarten, dass "1234" .slice (2, -1) "34" zurückgibt. Ja, das heißt, ich bin neu in Javascript. Dies bedeutet auch dieses Verhalten:
Mein 2c.
quelle
Der Unterschied zwischen Teilzeichenfolge und Slice besteht darin, wie sie mit negativen und übersehenen Zeilen im Ausland arbeiten:
Teilzeichenfolge (Anfang, Ende)
Negative Argumente werden als Null interpretiert. Zu große Werte werden auf die Länge der Zeichenfolge abgeschnitten: alert ("testme" .substring (-2)); // "testme", -2 wird 0
Wenn start> end ist, werden die Argumente vertauscht, dh die Plotlinie kehrt zwischen Start und Ende zurück:
Scheibe
Negative Werte werden am Ende der Zeile gemessen:
Es ist viel praktischer als die seltsame Logik-Teilzeichenfolge.
Ein negativer Wert des ersten Parameters für substr, der in allen Browsern außer IE8- unterstützt wird.
Wenn die Wahl einer dieser drei Methoden für die Verwendung in den meisten Situationen - es ist Slice : negative Argumente und es behält und funktioniert am offensichtlichsten.
quelle
substr: Es ermöglicht uns, einen Teil der Zeichenfolge basierend auf dem angegebenen Index abzurufen. Syntax von substrstring.substr (Start, Ende) Start - Startindex gibt an, wo der Abruf beginnt. Der End-End-Index gibt an, wo der String abgerufen wird. Es ist optional.
Slice: Es wird bereitgestellt, einen Teil der Zeichenfolge basierend auf dem angegebenen Index abzurufen. Es ermöglicht uns, Positiv und Index anzugeben. Die Syntax des Slice-String-Slice-Startindex (Start, Ende) gibt an, wo der Abruf beginnt. Der End-End-Index gibt an, wo der String abgerufen wird. Es ist optional. Beim 'Spleißen' helfen sowohl der Start- als auch der Endindex dabei, einen positiven und einen negativen Index zu erhalten.
Beispielcode für 'Slice' in String
Beispielcode für 'Teilzeichenfolge' in Zeichenfolge
[* Hinweis: Die negative Indizierung beginnt am Ende der Zeichenfolge.]
quelle
Der einzige Unterschied zwischen Slice- und Teilstring-Methode besteht in Argumenten
Beide nehmen zwei Argumente an, z. B. start / from und end / to.
Sie können keinen negativen Wert als erstes Argument für die Teilstring- Methode übergeben, sondern für die Slice- Methode, um ihn vom Ende zu durchlaufen.
Details der Slice-Methodenargumente:
REF: http://www.thesstech.com/javascript/string_slice_method
Argumente
start_index Index, von dem aus das Slice beginnen soll. Wenn der Wert negativ angegeben ist, bedeutet dies, dass vom letzten begonnen wird. zB -1 für das letzte Zeichen. end_index Index nach dem Ende des Slice. Wenn nicht angegeben, wird das Slice vom Startindex bis zum Ende der Zeichenfolge übernommen. Im Falle eines negativen Wertes wird der Index ab dem Ende der Zeichenfolge gemessen.
Details zum Argument der Teilzeichenfolge:
REF: http://www.thesstech.com/javascript/string_substring_method
Argumente
from Es sollte eine nicht negative Ganzzahl sein, um den Index anzugeben, von dem aus die Unterzeichenfolge beginnen soll. to Eine optionale nicht negative Ganzzahl, um einen Index bereitzustellen, vor dem die Unterzeichenfolge beendet werden soll.
quelle
Für
slice(start, stop)
wenn,stop
negativ ist,stop
wird eingestellt auf:eher, als:
quelle