Uwe: Frage zum Wiki-Artikel „substr“

problematische Seite

substr() gehört offenbar nicht zu ES6 und wird bei Mozilla als "deprecated" geführt. Das sollte hier angegeben werden.

  1. problematische Seite

    Servus!

    substr() gehört offenbar nicht zu ES6 und wird bei Mozilla als "deprecated" geführt. Das sollte hier angegeben werden.

    Danke, erledigt.

    Hättest du aber auch selbst tun können - es ist ein Wiki!

    Herzliche Grüße

    Matthias Scharwies

    --
    Eigentlich hatte ich heute viel vor - jetzt habe ich morgen viel vor!
  2. problematische Seite

    Lieber Uwe,

    substr() gehört offenbar nicht zu ES6 und wird bei Mozilla als "deprecated" geführt. Das sollte hier angegeben werden.

    das Problem daran ist für mich, dass es für "abcdefg".substr(-2) // "fg" keine sinnvolle Entsprechung mit String.substring() gibt. Wenn die für String.substring() keine negativen Parameter einführen, geht mit der Deprecation definitiv Funktionalität verloren.

    Liebe Grüße

    Felix Riesterer

    1. problematische Seite

      Hallo Ingrid,

      das Problem daran ist für mich, dass es für "abcdefg".substr(-2) // "fg" keine sinnvolle Entsprechung mit String.substring() gibt.

      die MDN pflichtet bei und sagt:

      Although you are encouraged to avoid using substr(), there is no trivial way to migrate substr() to either slice() or substring() in legacy code without essentially writing a polyfill for substr(). For example, str.substr(a, l), str.slice(a, a + l), and str.substring(a, a + l) all have different results when str = "01234", a = 1, l = -2 — substr() returns an empty string, slice() returns "123", while substring() returns "0". The actual refactoring path depends on the knowledge of the range of a and l.

      Liebe Grüße

      Felix Riesterer

  3. problematische Seite

    Hallo Uwe,

    Das ist nicht falsch, aber auch nicht ganz richtig.

    Die Spec verlangt von Browsern, dass sie substr implementieren, vor allem deshalb, weil anderenfalls die Hälfte aller JavaScript Programme der Welt verrecken würde. Ich werde daher zu Matthias' Änderung noch etwas nachtragen, sobald ich an einem geeigneten Gerät sitze…

    Außerhalb eines Browsers sieht es anders aus. Wie es in node.js jetzt und in Zukunft aussieht, wäre einer Recherche wert.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. problematische Seite

      So, ja, HERZLICHEN DANK 😡, lieber Uwe 😉

      Die JavaScript/Objekte/String Seite ist mal wieder zur größeren Baustelle geworden, da fehlten 16 der ECMAScript 2022 Methoden von String.prototype. Die muss ich jetzt Schritt für Schritt nachtragen.

      Witzigerweise ist String.prototype.substr im Status deprecated, seit es ECMAScript gibt. Also seit ES3 in 1999. ES1 und ES2 erwähnen sie nicht einmal. Die Methode ist ein Relikt aus JavaScript 1.2 bzw. Microsoft JScript und hat es nie in den ECMAScript Sprachkern geschafft. Sie stand immer nur als „wolle mer nit, muss ävver blieve“ im Appendix B.

      Wobei ich persönlich die substring-Methode scheiße finde. Ich habe sie noch nie verwendet, immer nur substr. Jede Sprache, die ich kenne, implementiert die Teilstring-Bildung als "ab Position X in der Länge Y". Nur ECMAScript findet es spaßig, hierfür "von Position X bis vor, aber nicht inclusive Position Y" zu definieren.

      Rolf

      --
      sumpsi - posui - obstruxi
      1. problematische Seite

        Hallo Rolf,

        Nur ECMAScript findet es spaßig, hierfür "von Position X bis vor, aber nicht inclusive Position Y" zu definieren.

        das entspricht aber dem üblichen Alltagsverständnis. Wenn ich Wertebereiche aufzähle wie "von 10 bis 20, von 20 bis 30, von 30 bis 40" und so fort, dann ist auch jedem klar, dass ich genaugenommen [10,20[, [20,30[, [30,40[ meine, die Intervall-Obergrenze also nicht inklusive ist. Insofern ist ECAMScript da durchaus intuitiv.

        Dass man das Indizieren vom Stringende mit negativen Indexen nicht unterstützt, ist bedauerlich, aber eine ganz andere Geschichte.

        Einen schönen Tag noch
         Martin

        --
        Wer kennt ein schönes Autofahrer-Märchen? - Radkäppchen und der böse Golf
        1. problematische Seite

          @@Der Martin

          das entspricht aber dem üblichen Alltagsverständnis. Wenn ich Wertebereiche aufzähle wie "von 10 bis 20, von 20 bis 30, von 30 bis 40" und so fort, dann ist auch jedem klar, dass ich genaugenommen [10,20[, [20,30[, [30,40[ meine, die Intervall-Obergrenze also nicht inklusive ist.

          Ich bin nicht jeder.

          „Von a bis z“ gibt ein beiderseits geschlossenes Intervall [a, z] an. Die Intervall-Obergrenze ist also inklusive.

          „Zwischen a und z“ gibt ein beiderseits offenes Intervall ]a, z[ an.

          Das haben wir so in der allgemenbildenden polytechnischen Oberschule gelernt.

          🖖 Живіть довго і процвітайте

          --
          „Im Vergleich mit Elon Musk bei Twitter ist ein Elefant im Porzellanladen eine Ballerina.“
          — @Grantscheam auf Twitter
        2. problematische Seite

          Hallo Martin,

          Ich bin nicht jeder. -- Gunnar Bittersmann

          Ich auch nicht. "Verteile diese Zettel in der Hauptstraße 1 bis 99", dann schmeiße ich bei 99 was rein.

          Andererseits - "Der Workshop dauert von 8 bis 12 Uhr", dann geht er mit etwas Glück um 8 los - ist aber oft genug cum tempore, weil die Teilnehmer noch am Kaffeeautomaten kleben. Und wenn er um 11:55 noch läuft, kriegt der Moderator Ärger, weil von 12 bis 13 Uhr Mittagspause ist und man ja noch zur Kantine gehen muss.

          D.h. der Zeitplan hat hier eine Mehrdeutigkeit - was ist um EXAKT 12 Uhr, Workshop oder Coffeeshop? Das löst sich durch

          [ 8,12[ - Workshop
          [12,13[ - Mittagspause
          [13,16[ - Workshop
          [17, ?[ - Ausklang
          

          natürlich auf, ist aber im praktischen Leben ohne Bedeutung, weil… siehe oben.

          Rolf

          --
          sumpsi - posui - obstruxi