Weiß jemand, was der Unterschied zwischen diesen beiden Methoden ist?
String.prototype.slice
String.prototype.substring
tmim
Weiß jemand, was der Unterschied zwischen diesen beiden Methoden ist?
String.prototype.slice
String.prototype.substring
Daniel Wassallo
slice()
funktioniert wie substring()
mit ein paar unterschiedlichen Verhaltensweisen.
Syntax: string.slice(start, stop);
Syntax: string.substring(start, stop);
Was sie gemeinsam haben:
start
gleich stop
: gibt eine leere Zeichenfolge zurückstop
wird weggelassen: Extrahiert Zeichen bis zum Ende der ZeichenfolgeUnterscheidungen von substring()
:
start > stop
, dann substring
tauscht diese 2 Argumente aus.NaN
, es wird behandelt, als ob es wäre 0
.Unterscheidungen von slice()
:
start > stop
, slice()
gibt den leeren String zurück. (""
)start
ist negativ: setzt char vom Ende der Zeichenfolge, genau wie substr()
im Firefox. Dieses Verhalten wird sowohl in Firefox als auch in IE beobachtet.stop
ist negativ: setzt stop auf: string.length – Math.abs(stop)
(ursprünglicher Wert), außer auf 0 begrenzt (also Math.max(0, string.length + stop)
) wie in der abgedeckt ECMA-Spezifikation.Quelle: Rudimentäre Programmier- und Entwicklungskunst: Javascript: substr() vs substring()
In Ihrer letzten Anmerkung zu slice()
, es sollte sein string.length - stop
– Andy
14. Februar 12 um 15:16 Uhr
In Ihrer letzten Anmerkung zu slice()
, ich denke, es sollte sein (string.length – 1) + stop
oder um deutlich zu machen, dass es negativ ist, (string.length – 1) – Math.abs(stop)
– Oriol
1. September 12 um 17:46 Uhr
@Longpoke: String.slice
wurde hinzugefügt, damit es eine konsistente String-Methode gibt Array.slice
. substring
war schon immer da, also haben sie es nicht kaputt gemacht und eine andere Methode hinzugefügt. Kaum eine schlechte Entscheidung, da 1. Konsistenz schön ist und 2. es der Slicing-Syntax von CoffeeScript ermöglicht, mit Arrays und Strings zu arbeiten. @Oriol: bearbeitet es in.
– fliegende Schafe
13. Januar 13 um 21:34 Uhr
Es scheint, dass es in Firefox 22 einen Leistungsunterschied zwischen Substring und Slice gibt. jsperf.com/string-slice-vs-substring
– Rick
17. Juli 13 um 21:29 Uhr
Andi hatte Recht. stop
wird eingestellt string.length + stop
wenn stop
ist negativ. Merken stop
ist der Index nach dem letzten extrahierten Zeichen!
– Benutzer1537366
9. Dezember 14 um 15:53 Uhr
Waddah
slice()
.substr()
.Ansonsten lesen Sie weiter für einen vollständigen Vergleich
string.slice(start,end)
string.substr(start,length)
string.substring(start,end)
Anmerkung 1: slice()==substring()
slice()
-Methode extrahiert Teile einer Zeichenfolge und gibt die extrahierten Teile in einer neuen Zeichenfolge zurück.substr()
-Methode extrahiert Teile einer Zeichenfolge, beginnend mit dem Zeichen an der angegebenen Position, und gibt die angegebene Anzahl von Zeichen zurück.substring()
-Methode extrahiert Teile einer Zeichenfolge und gibt die extrahierten Teile in einer neuen Zeichenfolge zurück.Anmerkung 2: slice()==substring()
slice()
Nichtsubstr()
Nichtsubstring()
Nichtslice()==substring()
slice()
wählt Zeichen ab dem Ende der Zeichenfolge aussubstr()
wählt Zeichen ab dem Ende der Zeichenfolge aussubstring()
Funktioniert nichtNotiz 3: slice()==substr()
slice()
Funktioniert nichtsubstr()
Da das zweite Argument KEINE Position, sondern ein Längenwert ist, funktioniert es wie gewohnt ohne Problemesubstring()
vertauscht die beiden Argumente und verhält sich wie gewohntslice()
Erforderlich, gibt an: Startindexsubstr()
Erforderlich, gibt an: Startindexsubstring()
Erforderlich, gibt an: StartindexHinweis Nr. 4: slice()==substr()==substring()
slice()
Optional: Die Position (bis einschließlich), an der die Extraktion beendet werden sollsubstr()
Optional, die Anzahl der zu extrahierenden Zeichensubstring()
Optional: Die Position (bis einschließlich), an der die Extraktion beendet werden sollHinweis Nr. 5: slice()==substring()
slice()
wählt alle Zeichen von der Startposition bis zum Ende des Strings aussubstr()
wählt alle Zeichen von der Startposition bis zum Ende des Strings aussubstring()
wählt alle Zeichen von der Startposition bis zum Ende des Strings ausHinweis Nr. 6: slice()==substr()==substring()
Man kann also sagen, dass es einen Unterschied zwischen gibt slice()
und substr()
, während substring()
ist im Grunde eine Kopie von slice()
.
substr() sollte nicht verwendet werden developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
– Tödlich
11. Juli 19 um 10:23 Uhr
@Killy Quelle, dass es sich um eine Legacy-Funktion handelt Wird in deinem Link nicht erwähnt.
– CodeFinity
10. August 2020 um 17:12 Uhr
Sie fassen Ihre lange Antwort mit “substring() ist im Grunde eine Kopie von Slice()” zusammen, aber die Frage betraf genau den Unterschied zwischen diesen beiden. Der Rest Ihrer Antwort verfehlt das Thema, abgesehen davon nur relevante Stückinformationen “Slice wird die Argumente austauschen” irgendwo in der Mitte versteckt.
– max
8. Dezember 2020 um 18:21 Uhr
@CodeFinity, als ich den Beitrag schrieb, gab es einen Kommentar dazu, aber jemand hat ihn im Juli 2020 entfernt web.archive.org/web/20200704195437/https://…
– Tödlich
10. Februar 21 um 14:49 Uhr
@Killy: Es ist immer noch in der Kompatibilitätstabelle sowie in der Seitenleiste. Es gibt Widersprüchlichkeiten in den Bannern. Keine Ahnung, warum jemand es von einem entfernt hat, aber nicht von den anderen oder umgekehrt. Die Ungereimtheit ist etwas unglücklich. Banner ist auf allen anderen vorhanden. Zusamenfassend substr
ist Teil des Anhangs B des ECMA-Standards und daher kein Kerngeschäft. Es gibt einen Hinweis für seine Verwendung: 262.ecma-international.org/9.0/… – MDN-Hinweis: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
– Benutzer3342816
5. März 21 um 18:00 Uhr
Jón Viðar Þorsteinsson
Ben Nadel hat dazu einen guten Artikel geschrieben, er weist auf den Unterschied in den Parametern zu diesen Funktionen hin:
String.slice( begin [, end ] )
String.substring( from [, to ] )
String.substr( start [, length ] )
Er weist auch darauf hin, dass wenn die zu schneidenden Parameter negativ sind, sie die Zeichenfolge vom Ende referenzieren. Substring und substr nicht.
Hier ist sein Artikel über das.
Das ist falsch, substr verarbeitet negative Parameter. '0123456789'.substr(-3, 2) -> '78'
– Neil Fraser
25. Mai 17 um 15:22 Uhr
über substr von mdn “Veraltet. Nicht für die Verwendung in neuen Websites.”
– hafiz ali
8. Mai 21 um 7:22 Uhr
Gerard ONeill
Die eine Antwort ist in Ordnung, erfordert aber ein wenig Einlesen. Vor allem mit der neuen Terminologie „Stopp“.
My Go – organisiert nach Unterschieden, um es zusätzlich zu der ersten Antwort von Daniel oben nützlich zu machen:
1) negative Indizes. Substring erfordert positive Indizes und setzt einen negativen Index auf 0. Der negative Index von Slice bedeutet die Position vom Ende der Zeichenfolge.
"1234".substring(-2, -1) == "1234".substring(0,0) == ""
"1234".slice(-2, -1) == "1234".slice(2, 3) == "3"
2) Austausch von Indizes. Substring ordnet die Indizes neu an, um den ersten Index kleiner oder gleich dem zweiten Index zu machen.
"1234".substring(3,2) == "1234".substring(2,3) == "3"
"1234".slice(3,2) == ""
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 bedeutet, dass ich neu bei Javascript bin. Damit ist auch dieses Verhalten gemeint:
"1234".slice(-2, -2) == "", "1234".slice(-2, -1) == "3", "1234".slice(-2, -0) == "" <-- you have to use length or omit the argument to get the 4.
"1234".slice(3, -2) == "", "1234".slice(3, -1) == "", "1234".slice(3, -0) == "" <-- same issue, but seems weirder.
Mein 2c.
Alexander
Der Unterschied zwischen substring
und slice
– So arbeiten sie mit negativen und übersehenden Linien im Ausland Argumente:
Negative Argumente werden als Null interpretiert. Zu große Werte werden auf die Länge des Strings gekürzt:
alert("testme".substring(-2)); // "testme", -2 becomes 0
Außerdem, wenn Anfang > Ende, werden die Argumente vertauscht, dh die Plotlinie kehrt zwischen Anfang und Ende zurück:
alert("testme".substring(4, -1)); // "test"
// -1 Becomes 0 -> got substring (4, 0)
// 4> 0, so that the arguments are swapped -> substring (0, 4) = "test"
Negative Werte werden vom Ende der Linie gemessen:
alert("testme".slice(-2)); // "me", from the end position 2
alert("testme".slice(1, -1)); // "estm", from the first position to the one at the end.
Es ist viel bequemer als die seltsame Logik substring
.
Ein negativer Wert des ersten Parameters für substr wird in allen Browsern außer IE8- unterstützt.
Wenn Sie sich für eine dieser drei Methoden entscheiden, die in den meisten Situationen zum Einsatz kommen, wird dies der Fall sein slice
: negative Argumente und es unterhält und funktioniert am offensichtlichsten.
Sohail Arif
Der einzige Unterschied zwischen der Slice- und der Substring-Methode besteht in den Argumenten
Beide nehmen zwei Argumente, zB start/from und end/to.
Sie können keinen negativen Wert als erstes Argument für übergeben Teilzeichenfolge Methode, aber für Scheibe Methode, um es von Ende zu durchlaufen.
Details zum Slice-Methodenargument:
REF:
http://www.thesstech.com/javascript/string_slice_method
Argumente
Startindex
Index, ab dem Slice beginnen soll. Wenn der Wert negativ angegeben wird, bedeutet dies, dass er beim letzten beginnt. zB -1 für letztes Zeichen.
end_index
Index nach Ende des Slice. Wenn nicht angegeben, wird Slice von start_index bis zum Ende der Zeichenfolge genommen. Bei negativem Wert wird der Index vom Ende der Zeichenfolge gemessen.
Details zum Argument der Substring-Methode:
REF: http://www.thesstech.com/javascript/string_substring_method
Argumente
von
Es sollte eine nicht negative Ganzzahl sein, um den Index anzugeben, ab dem die Teilzeichenfolge beginnen soll.
zu
Eine optionale nicht negative Ganzzahl, um einen Index bereitzustellen, vor dem die Teilzeichenfolge beendet werden soll.
Aschraf Sada
substr: Es ermöglicht uns, einen Teil der Zeichenfolge basierend auf dem angegebenen Index abzurufen. Syntax von substr- string.substr(start,end) start – Startindex gibt an, wo der Abruf beginnt. end – end index teilt mit, wo der String abgeholt wird. Es ist optional.
Slice: Es bietet die Möglichkeit, einen Teil der Zeichenfolge basierend auf dem angegebenen Index abzurufen. Es erlaubt uns, Positiv und Index anzugeben. Syntax von Slice – string.slice (Start, Ende) Start – Startindex gibt an, wo der Abruf beginnt. Sein Ende – Endindex gibt an, wo die Zeichenfolge abgerufen wird. Es ist optional. In ‘Splice’ helfen sowohl der Start- als auch der Endindex, einen positiven und negativen Index zu nehmen.
Beispielcode für „Slice“ in Zeichenfolge
var str="Javascript";
console.log(str.slice(-5,-1));
output: crip
Beispielcode für ‘substring’ in string
var str="Javascript";
console.log(str.substring(1,5));
output: avas
[*Note: negative indexing starts at the end of the string.]
Was Sie geschrieben haben, ist falsch UND für die Frage nicht relevant. substr () ist eine andere Funktion, sie hat KEINE Parameter “start, stop”, wie Sie in Ihrer Antwort fälschlicherweise angeben: Sie hat Parameter “start, length”. Aber die Frage bezieht sich überhaupt nicht auf substr()! Glücklicherweise wurde bereits 9 Jahre zuvor eine richtige und vollständige Antwort gegeben…
– max
8. Dezember 2020 um 18:32 Uhr
.
Es ist ein Beispiel für das schlechte Design von JavaScript, dass wir am Ende drei Methoden hatten, die alle dasselbe tun, aber unterschiedliche Macken haben. Meiner Meinung nach
slice
ist derjenige mit dem am wenigsten unerwarteten Verhalten.– Bobin
11. Februar 10 um 15:53 Uhr
IMO-Teilzeichenfolge, wenn sie verwendet wird, um eine Teilzeichenfolge von idx bis zum Ende zu nehmen, ist auf einen Blick verständlicher. Vor allem für Noobs
– mplungjan
6. Juli 11 um 13:12 Uhr
Gemäß Diese Internetseite,
slice
eigentlich ersetzen kannsubstring
und es gibt keinen Grund, es zu verwenden.– Derek 朕會功夫
8. Juli 12 um 22:36 Uhr
@AmolMKulkarni Stimmt überhaupt nicht. Wenn du es versuchst
var a = "asdf".substring(-1);
, es wird behandelt alsvar a = "asdf".substring(0);
. Es wird keine Ausnahme ausgelöst. Und wenn Sie verwendenvar a = "asdf".substring(2, -1);
, es benutzt0
anstelle von-1
(wie zuvor) und tauscht die Argumente so aus, dass es sich wie folgt verhältvar a = "asdf".substring(0, 2);
. Ich habe diese sogar auf IE 8 ausprobiert und die Ergebnisse ohne Ausnahmen erhalten– Jan
17. Juli 13 um 17:38 Uhr
“Ich habe diese sogar auf IE 8 ausprobiert” – Ich liebe das Programmieren.
– quemeful
14. März 15 um 14:55 Uhr