substr()
behandelt negative Indizes perfekt, aber substring()
akzeptiert nur nichtnegative Indizes.
Gibt es einen Grund, substr
nicht zugunsten von substring
zu verwenden? Die Verwendung negativer Indizes ist in vielen Fällen so nützlich, weil der Raum von Indizes als zyklische Gruppe betrachtet wird. Warum substr
wird von MDN als "veraltet" angezeigt?
Teilstring ist, wenn Sie einen Start- und Endindex angeben möchten. substr ist, wenn Sie einen Start-Offset und eine Länge angeben möchten. Sie machen verschiedene Dinge und haben unterschiedliche Anwendungsfälle.
Bearbeiten:
Um die genaue Frage von
besser zu beantworten Warum behandelt substring keine negativen Indizes?
substring
gibt einen Anfang und einen Ende Index von Zeichen in einer Zeichenfolge an. substr
behandelt einen Anfang offset und eine Länge. Es macht für mich Sinn, dass substring
keinen negativen Index zulässt, weil es wirklich keinen negativen Index gibt (die Zeichen in einem String sind von 0 bis n indiziert, ein "negativer Index" wäre out) Grenzen). Da substr
mit einem offset gegen einen index zu tun hat, bin ich der Meinung, dass der Begriff Offset locker genug ist, um einen negativen Offset zu berücksichtigen, was natürlich rückwärts zählen bedeutet Ende des Strings statt von vorne nach vorne. Dies könnte nur Semantik sein, aber wie ich es verstehe.
Warum ist substr
veraltet?
Ich würde behaupten, dass dies in der Tat nicht veraltet ist.
Der Revisionsverlauf substr MDN gibt an, dass der veraltete Hinweis eingefügt wurde basierend auf diesem Blogpost:
16. August 2016, 12:00:34 Uhr Hexalien Fügen Sie veraltete Erwähnungen per Ссылка
hinzu
Was besagt, dass die HTML-String-Methoden veraltet sind (was sie sein sollten!). Dies sind Methoden, die einen String in ein HTML-Tag einschließen, dh "abc".sub()
würde <sub>abc</sub>
zurückgeben. Der Blogpost listet alle HTML-String-Methoden auf, und imho fügt fälschlicherweise subtr
als HTML-String-Methode ein (was nicht der Fall ist).
Das sieht also nach einem Missverständnis für mich aus.
(Auszug unten, Hervorhebung von mir hinzugefügt)
Highlights:
Die berüchtigten "String-HTML-Methoden": String.prototype.anchor (name), String.prototype.big (), String.prototype.blink (), String.prototype.bold (), String.prototype.fixed (), String.prototype.fontcolor (color), String.prototype.fontsize (size), String.prototype.italics (), String.prototype.link (href), String.prototype.small (), String.prototype.strike (), String.prototype (), String.prototypeStr (Start, Länge) und String.prototype (). Browser implementiert diese leicht auf verschiedene Weise unterschiedlich, was in einem Fall zu einer Sicherheit führt Problem (und nicht nur in der Theorie!). Es war ein harter Kampf, aber schließlich stimmten Browser und die ECMAScript-Spezifikation dem Verhalten zu der JavaScript Standard hatte definiert.
substr
ist besonders nützlich, wenn Sie nur an den letzten N Zeichen einer Zeichenfolge unbekannter Länge interessiert sind.
Wenn Sie beispielsweise wissen möchten, ob eine Zeichenfolge mit einem einzelnen Zeichen endet:
%Vor% Wenn Sie diese Funktion mit substring
implementieren, müssen Sie zuerst die Länge der Zeichenfolge berechnen.
Beide Funktionen können verwendet werden, um die gleichen Ergebnisse zu erhalten, aber substr
ist bequemer.
Es gibt drei Funktionen in JS, die mehr oder weniger dasselbe tun:
substring
substr
slice
Ich schätze, die meisten Leute benutzen Letzteres, weil es zu ihrem Array-Gegenstück passt. Die ersten beiden sind mehr oder weniger historische Relikte ( substring
war in JS1, dann substr
kam in zwei verschiedenen Geschmacksrichtungen usw.).
Warum wird substr von MDN als "veraltet" angegeben?
Der Hinweis wurde gemäß diesem Beitrag hinzugefügt von Mathias wobei substr
unter" string HTML-Methoden "(?) Aufgeführt ist. Der Grund für die Abwertung ist, dass es zu den gehört Anhang B , der besagt:
Dieser Anhang beschreibt verschiedene Legacy-Funktionen und andere Eigenschaften von webbrowserbasierten ECMAScript-Implementierungen. Alle Sprachmerkmale und Verhaltensweisen, die in diesem Anhang aufgeführt sind, weisen ein oder mehrere unerwünschte Merkmale auf und würden bei fehlender Legacy-Nutzung aus dieser Spezifikation entfernt.
Tags und Links javascript string