Warum behandelt substring keine negativen Indizes? [geschlossen]

8

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?

    
Kaa1el 26.08.2016, 20:43
quelle

3 Antworten

4

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.

Ссылка

    
chiliNUT 26.08.2016, 21:09
quelle
3

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.

%Vor%

Beide Funktionen können verwendet werden, um die gleichen Ergebnisse zu erhalten, aber substr ist bequemer.

    
Steven Schobert 26.08.2016 20:58
quelle
3

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.

    
georg 26.08.2016 21:09
quelle

Tags und Links