Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2015 browserübergreifend verfügbar.
Die String.raw() statische Methode ist eine Tag-Funktion von Template-Literalen. Dies ähnelt dem r Präfix in Python oder dem @ Präfix in C# für String-Literale. Sie wird verwendet, um die rohe String-Darstellung von Template-Literalen zu erhalten – das heißt, Ersetzungen (z.B. ${foo}) werden verarbeitet, aber Escape-Sequenzen (z.B. \n) nicht.
Gut geformtes Template-Literal-Array-Objekt, wie { raw: ['foo', 'bar', 'baz'] }. Sollte ein Objekt mit einer raw Eigenschaft sein, dessen Wert ein array-ähnliches Objekt von Strings ist.
sub1, …, subNBeinhaltet Ersetzungswerte.
templateStringEin Template-Literal, optional mit Ersetzungen (${...}).
Die rohe String-Darstellung eines gegebenen Template-Literals.
Wird ausgelöst, wenn das erste Argument keine raw Eigenschaft hat oder die raw Eigenschaft undefined oder null ist.
In den meisten Fällen wird String.raw() mit Template-Literalen verwendet. Die oben erwähnte erste Syntax wird nur selten genutzt, da die JavaScript-Engine dies für Sie mit den richtigen Argumenten aufruft (genau wie bei anderen Tag-Funktionen).
String.raw() ist der einzige eingebaute Template-Literal-Tag. Es hat enge semantische Ähnlichkeit mit einem nicht getaggten Literal, da es alle Argumente zusammenfügt und einen String zurückgibt. Sie können es sogar mit normalem JavaScript-Code neu implementieren.
Warnung: Sie sollten String.raw nicht direkt als "Identitäts"-Tag verwenden. Siehe Aufbau eines Identitäts-Tags, um zu lernen, wie Sie dies umsetzen.
Wenn String.raw() mit einem Objekt aufgerufen wird, dessen raw Eigenschaft keine length Eigenschaft oder eine nicht positive length hat, wird ein leerer String "" zurückgegeben. Wenn substitutions.length < strings.raw.length - 1 (d.h. es gibt nicht genug Ersetzungen, um die Platzhalter zu füllen — was in einem gut geformten getaggten Template-Literal nicht passieren kann), werden die restlichen Platzhalter mit leeren Strings gefüllt.
String.raw ist eine Funktion, daher kann es die grundlegende Template-Literal-Syntax wie Backticks als Trennzeichen und ${ für Ersetzungen nicht umgehen. Wenn Sie diese Zeichen in den Ausgabestring einfügen möchten, müssen Sie sie mit Backslashes maskieren. Da String.raw jedoch rohe Strings ausgibt, werden die Backslashes in der Ausgabe beibehalten.
Um dieses Problem zu umgehen, können Sie eine Ersetzung verwenden, um diese Zeichen einzufügen.
Dieser Ansatz funktioniert für String.raw, weil es einfach die rohen Strings und die Ersetzungen zusammenfügt. Im Allgemeinen gibt es leider keine Möglichkeit für einen Template-Literal-Tag, einen rohen String zu erhalten, der nicht maskierte Template-Literal-Syntax enthält.
Kombinieren eines String.raw Template-Literals mit dem RegExp() Konstruktor ermöglicht es Ihnen, reguläre Ausdrücke mit dynamischen Teilen zu erstellen (was mit Regex-Literalen nicht möglich ist), ohne reguläre Ausdrucks-Escape-Sequenzen doppelt zu maskieren (\\) (was mit normalen String-Literalen nicht möglich ist). Dies ist auch wertvoll in Strings, die viele Schrägstriche enthalten, wie Dateipfade oder URLs.
Viele Werkzeuge behandeln Literale, die mit einem bestimmten Namen getaggt sind, auf besondere Weise.
Man könnte naiv das html Tag so implementieren:
Dies funktioniert in der Tat für den oben genannten Fall. Da String.raw jedoch die rohen String-Literale zusammenfügen würde, anstatt die "gekochten", würden Escape-Sequenzen nicht verarbeitet.
Dies ist möglicherweise nicht das, was Sie bei einem "echten Identitäts"-Tag möchten, bei dem das Tag nur für Markup ist und den Wert des Literals nicht ändert. In diesem Fall können Sie ein benutzerdefiniertes Tag erstellen und das "gekochte" (d.h. Escape-Sequenzen werden verarbeitet) Literal-Array an String.raw übergeben, wobei Sie vorgeben, dass sie rohe Strings sind.
Beachten Sie, dass das erste Argument ein Objekt mit einer raw Eigenschaft ist, deren Wert ein array-ähnliches Objekt (mit einer length Eigenschaft und ganzzahligen Indizes) ist, das die getrennten Strings im Template-Literal darstellt. Die restlichen Argumente sind die Ersetzungen. Da der raw Wert jedes array-ähnliche Objekt sein kann, kann es sogar ein String sein! Zum Beispiel wird 'test' als ['t', 'e', 's', 't'] behandelt. Das folgende ist äquivalent zu `t${0}e${1}s${2}t`:
| ECMAScript® 2027 Language Specification # sec-string.raw |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.