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.
Template-Literale sind Literale, die mit Backtick-Zeichen (`) begrenzt sind und mehrzeilige Zeichenketten, Zeichenketteninterpolation mit eingebetteten Ausdrücken und spezielle Konstrukte namens getaggte Templates ermöglichen.
Template-Literale werden manchmal informell als Template-Zeichenketten bezeichnet, da sie am häufigsten für Zeichenketteninterpolation verwendet werden (um Zeichenketten durch Substitution von Platzhaltern zu erstellen). Ein getaggtes Template-Literal muss jedoch nicht zu einer Zeichenkette führen; es kann mit einer benutzerdefinierten Tag-Funktion verwendet werden, um beliebige Operationen an den verschiedenen Teilen des Template-Literals durchzuführen.
Der Zeichenketten-Text, der Teil des Template-Literals wird. Fast alle Zeichen sind wörtlich erlaubt, einschließlich Zeilenumbrüche und andere Leerzeichen. Ungültige Escape-Sequenzen führen jedoch zu einem Syntaxfehler, es sei denn, es wird eine Tag-Funktion verwendet.
expressionEin Ausdruck, der an der aktuellen Position eingefügt wird, dessen Wert in eine Zeichenkette umgewandelt oder an tagFunction übergeben wird.
tagFunctionWenn angegeben, wird sie mit dem Array der Template-Zeichenketten und der Substitution-Ausdrücke aufgerufen, und der Rückgabewert wird zum Wert des Template-Literals. Siehe getaggte Templates.
Template-Literale sind in Backtick-Zeichen (`) statt in doppelten oder einzelnen Anführungszeichen eingeschlossen.
Neben normalen Zeichenketten können Template-Literale auch andere Teile enthalten, sogenannte Platzhalter, welche eingebettete Ausdrücke sind, die durch ein Dollarzeichen und geschweifte Klammern begrenzt werden: ${expression}. Die Zeichenketten und Platzhalter werden an eine Funktion übergeben - entweder eine Standardfunktion oder eine von Ihnen bereitgestellte Funktion. Die Standardfunktion (wenn Sie keine eigene bereitstellen) führt einfach eine Zeichenketteninterpolation durch, um die Platzhalter zu substituieren und dann die Teile in eine einzelne Zeichenkette zu konkatinieren.
Um eine eigene Funktion bereitzustellen, setzen Sie den Namen der Funktion vor das Template-Literal; das Ergebnis wird als getaggtes Template bezeichnet. In diesem Fall wird das Template-Literal an Ihre Tag-Funktion übergeben, wo Sie dann beliebige Operationen an den verschiedenen Teilen des Template-Literals durchführen können.
Um einen Backtick in einem Template-Literal zu escapen, setzen Sie einen Backslash (\) vor den Backtick.
Dollarzeichen können ebenfalls escaped werden, um die Interpolation zu verhindern.
Alle eingefügten Zeilenumbrüche im Quelltext sind Teil des Template-Literals.
Bei normalen Zeichenketten müssten Sie die folgende Syntax verwenden, um mehrzeilige Zeichenketten zu erhalten:
Mit Template-Literalen können Sie dasselbe mit diesem erreichen:
Wie bei normalen Zeichenkettenliteralen können Sie eine einzeilige Zeichenkette über mehrere Zeilen zur Lesbarkeit des Quellcodes schreiben, indem Sie den Zeilenumbruch mit einem Backslash (\) escapen:
Ohne Template-Literale, wenn Sie Ausgaben von Ausdrücken mit Zeichenketten kombinieren möchten, müssten Sie sie konkatinieren mittels des Additionsoperators +:
Das kann schwer zu lesen sein - insbesondere, wenn mehrere Ausdrücke vorliegen.
Mit Template-Literalen können Sie den Konkatinationsoperator vermeiden - und die Lesbarkeit Ihres Codes verbessern - indem Sie Platzhalter in der Form ${expression} verwenden, um Ersetzungen für eingebettete Ausdrücke vorzunehmen:
Beachten Sie, dass zwischen den beiden Syntaxen ein kleiner Unterschied besteht. Template-Literale zwingen ihre Ausdrücke direkt zu Zeichenketten, während Addition ihre Operanden zuerst in Primitive zwingt. Für weitere Informationen lesen Sie die Referenzseite für den + Operator.
In bestimmten Fällen ist die Verschachtelung eines Templates der einfachste (und vielleicht lesbarere) Weg, um konfigurierbare Zeichenketten zu erstellen. Innerhalb eines durch Backticks begrenzten Templates ist es einfach, innere Backticks zu ermöglichen, indem sie innerhalb eines ${expression} Platzhalters im Template verwendet werden.
Zum Beispiel, ohne Template-Literale, wenn Sie einen bestimmten Wert basierend auf einer bestimmten Bedingung zurückgeben möchten, könnten Sie so etwas tun:
Mit einem Template-Literal, aber ohne Verschachtelung, könnten Sie dies tun:
Mit Verschachtelung von Template-Literalen können Sie dies tun:
Eine fortgeschrittenere Form von Template-Literalen sind getaggte Templates.
Tags ermöglichen es Ihnen, Template-Literale mit einer Funktion zu parsen. Das erste Argument einer Tag-Funktion enthält ein Array mit Zeichenkettenwerten. Die verbleibenden Argumente beziehen sich auf die Ausdrücke.
Die Tag-Funktion kann dann beliebige Operationen an diesen Argumenten ausführen und die manipulierte Zeichenkette zurückgeben. (Alternativ kann sie auch etwas völlig anderes zurückgeben, wie in einem der folgenden Beispiele beschrieben.)
Der Name der Funktion, die für das Tag verwendet wird, kann beliebig gewählt werden.
Das Tag muss kein einfacher Bezeichner sein. Sie können jeden Ausdruck mit höherer Präzedenz als 16 verwenden, was Eigenschaftszugriff, Funktionsaufruf, neuer Ausdruck oder sogar ein anderes getaggtes Template-Literal einschließt.
Obwohl technisch durch die Syntax erlaubt, führen nicht-getaggte Template-Literale zu Zeichenketten und lösen einen TypeError aus, wenn sie verkettet werden.
Die einzige Ausnahme bildet die optionale Verkettung, die einen Syntaxfehler erzeugt.
Beachten Sie, dass diese beiden Ausdrücke immer noch analysierbar sind. Dies bedeutet, dass sie nicht der automatischen Einfügung von Semikolons unterliegen, die nur Semikolons einfügt, um Code zu reparieren, der ansonsten nicht analysierbar ist.
Tag-Funktionen müssen nicht einmal eine Zeichenkette zurückgeben!
Das erste Argument, das die Tag-Funktion erhält, ist ein Array von Zeichenketten. Bei jedem Template-Literal entspricht seine Länge der Anzahl der Substitutionen (Vorkommen von ${…}) plus eins und ist daher immer nicht leer.
Für einen bestimmten getaggten Template-Literal-Ausdruck wird die Tag-Funktion immer mit demselben Literal-Array aufgerufen, unabhängig davon, wie oft das Literal ausgewertet wird.
Dies ermöglicht es dem Tag, das Ergebnis basierend auf der Identität seines ersten Arguments im Cache zu speichern. Um die Stabilität des Array-Werts weiter zu gewährleisten, sind das erste Argument und seine raw Eigenschaft beide eingefroren, sodass Sie sie in keiner Weise verändern können.
Die spezielle raw Eigenschaft, die für das erste Argument der Tag-Funktion verfügbar ist, ermöglicht den Zugriff auf die Rohzeichenfolgen, wie sie eingegeben wurden, ohne die Verarbeitung von Escape-Sequenzen.
Hinweis: Die Template-Literal-Syntax wird immer noch auf die gleiche Weise verarbeitet, was bedeutet, dass nicht-escaped Backticks und ${ eine spezielle syntaktische Bedeutung haben, das Escaping dieser Zeichen jedoch zusätzliche Backslashes in der Rohzeichenfolge erzeugt. Weitere Informationen finden Sie unter Rohzeichenfolgen, die Template-Literal-Syntax enthalten.
Zusätzlich existiert die Methode String.raw(), um Rohzeichenfolgen ebenso zu erstellen, wie die Standard-Template-Funktion und die Zeichenkettenkonkatination es tun würden.
String.raw funktioniert wie ein „Identitäts“-Tag, wenn das Literal keine Escape-Sequenzen enthält. Falls Sie ein tatsächliches Identitäts-Tag möchten, das immer funktioniert, als ob das Literal nicht getaggt wäre, können Sie eine benutzerdefinierte Funktion erstellen, die das „gekochte“ (d.h. Escape-Sequenzen werden verarbeitet) Literal-Array an String.raw übergibt, als wären es Rohzeichenfolgen.
Dies ist nützlich für viele Tools, die Literalen, die durch einen bestimmten Namen getaggt sind, eine besondere Behandlung zukommen lassen.
In normalen Template-Literalen sind die Escape-Sequenzen in Zeichenkettenliteralen alle erlaubt. Jede andere nicht gut geformte Escape-Sequenz ist ein Syntaxfehler. Dazu gehören:
Hinweis: \ gefolgt von anderen Zeichen, auch wenn sie nutzlos sind, da nichts escaped wird, sind keine Syntaxfehler.
Jedoch ist dies problematisch für getaggte Templates, welche zusätzlich zu dem „gekochten“ Literal auch Zugang zu den Roh-Literalen (Escape-Sequenzen werden unverändert beibehalten) haben.
Getaggte Templates ermöglichen das Einbetten von beliebigem Zeichenketteninhalt, wobei Escape-Sequenzen einer anderen Syntax folgen können. Betrachten Sie ein Beispiel, bei dem wir LaTeX-Quelltext in JavaScript über String.raw einbetten. Wir möchten trotzdem LaTeX-Makros, die mit u oder x beginnen, ohne den Einschränkungen der JavaScript-Syntax nutzen können. Daher wird die Syntaxbeschränkung für gut geformte Escape-Sequenzen von getaggten Templates entfernt. Das folgende Beispiel verwendet MathJax, um LaTeX in einem Element zu rendern:
Jedoch müssen illegale Escape-Sequenzen immer noch in der „gekochten“ Darstellung vorhanden sein. Diese werden als undefined-Element im „gekochten“ Array dargestellt:
Beachten Sie, dass die Escape-Sequenz-Einschränkung nur bei getaggten Templates, nicht jedoch bei nicht-getaggten Template-Literalen aufgehoben ist:
| ECMAScript® 2027 Language Specification # sec-template-literals |
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.