Was ist der Unterschied zwischen String.slice und String.substring?

Lesezeit: 10 Minuten

Was ist der Unterschied zwischen Stringslice und Stringsubstring
tmim

Weiß jemand, was der Unterschied zwischen diesen beiden Methoden ist?

String.prototype.slice
String.prototype.substring

  • 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 kann substring 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 als var a = "asdf".substring(0);. Es wird keine Ausnahme ausgelöst. Und wenn Sie verwenden var a = "asdf".substring(2, -1);, es benutzt 0 anstelle von -1 (wie zuvor) und tauscht die Argumente so aus, dass es sich wie folgt verhält var 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

1643993111 898 Was ist der Unterschied zwischen Stringslice und Stringsubstring
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:

  1. Wenn start gleich stop: gibt eine leere Zeichenfolge zurück
  2. Wenn stop wird weggelassen: Extrahiert Zeichen bis zum Ende der Zeichenfolge
  3. Wenn eines der Argumente größer als die Länge der Zeichenfolge ist, wird stattdessen die Länge der Zeichenfolge verwendet.

Unterscheidungen von substring():

  1. Wenn start > stop, dann substring tauscht diese 2 Argumente aus.
  2. Wenn eines der Argumente negativ ist oder ist NaN, es wird behandelt, als ob es wäre 0.

Unterscheidungen von slice():

  1. Wenn start > stop, slice() gibt den leeren String zurück. ("")
  2. Wenn 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.
  3. Wenn 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

Was ist der Unterschied zwischen Stringslice und Stringsubstring
Waddah

TL;DR;

  • Wenn Sie den Index (die Position) kennen, an der Sie anhalten (aber NICHT einschließen), verwenden Sie slice().
  • Wenn Sie die Länge der zu extrahierenden Zeichen kennen, verwenden Sie substr().

Ansonsten lesen Sie weiter für einen vollständigen Vergleich

Syntax

  • string.slice(start,end)
  • string.substr(start,length)
  • string.substring(start,end)

Anmerkung 1: slice()==substring()

Was es macht?

  • Der slice() -Methode extrahiert Teile einer Zeichenfolge und gibt die extrahierten Teile in einer neuen Zeichenfolge zurück.
  • Der substr() -Methode extrahiert Teile einer Zeichenfolge, beginnend mit dem Zeichen an der angegebenen Position, und gibt die angegebene Anzahl von Zeichen zurück.
  • Der substring() -Methode extrahiert Teile einer Zeichenfolge und gibt die extrahierten Teile in einer neuen Zeichenfolge zurück.

Anmerkung 2: slice()==substring()

Ändert die Originalzeichenfolge?

  • slice() Nicht
  • substr() Nicht
  • substring() Nicht
    Notiz 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() Funktioniert nicht

Notiz 3: slice()==substr()

Wenn das erste Argument größer ist als das zweite

  • slice() Funktioniert nicht
  • substr() Da das zweite Argument KEINE Position, sondern ein Längenwert ist, funktioniert es wie gewohnt ohne Probleme
  • substring() vertauscht die beiden Argumente und verhält sich wie gewohnt

Das erste Argument

  • slice() Erforderlich, gibt an: Startindex
  • substr() Erforderlich, gibt an: Startindex
  • substring() Erforderlich, gibt an: Startindex

Hinweis Nr. 4: slice()==substr()==substring()

Das zweite Argument

  • slice() Optional: Die Position (bis einschließlich), an der die Extraktion beendet werden soll
  • substr() Optional, die Anzahl der zu extrahierenden Zeichen
  • substring() Optional: Die Position (bis einschließlich), an der die Extraktion beendet werden soll

Hinweis Nr. 5: slice()==substring()

Was ist, wenn das zweite Argument ausgelassen wird?

  • slice() wählt alle Zeichen von der Startposition bis zum Ende des Strings aus
  • substr() wählt alle Zeichen von der Startposition bis zum Ende des Strings aus
  • substring() wählt alle Zeichen von der Startposition bis zum Ende des Strings aus

Hinweis 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


1643993113 458 Was ist der Unterschied zwischen Stringslice und Stringsubstring
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


1643993113 927 Was ist der Unterschied zwischen Stringslice und Stringsubstring
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.

1643993113 896 Was ist der Unterschied zwischen Stringslice und Stringsubstring
Alexander

Der Unterschied zwischen substring und slice – So arbeiten sie mit negativen und übersehenden Linien im Ausland Argumente:

Teilstring (Anfang, Ende)

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"

Scheibe

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.

Was ist der Zweck von new Boolean in Javascript
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.

1643993115 487 Was ist der Unterschied zwischen Stringslice und Stringsubstring
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

.

771590cookie-checkWas ist der Unterschied zwischen String.slice und String.substring?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy