Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 45
Getaggte Template-Literale
ОглавлениеEine mächtige, aber seltener verwendete Eigenschaft von Template-Literalen besteht darin, dass der Text und die Werte der Ausdrücke innerhalb des Template-Literals an eine Funktion übergeben werden, sofern direkt vor dem öffnenden Backtick ein Funktionsname (bzw. ein Tag oder eine Tag-Funktion) steht. Der Wert eines solchen getaggten Template-Literals ist der Rückgabewert der Funktion. Auf diese Weise kann man zum Beispiel HTML- oder SQL-Escaping auf Werte anwenden, bevor sie in einen Text eingefügt werden.
ES6 bringt von Haus aus eine eingebaute Tag-Funktion mit: String.raw(). Sie gibt den von Backticks eingeschlossenen Text zurück, ohne dass Backslash-Maskierungen verarbeitet werden:
`\n`.length // => 1: Der String enthält ein einzelnes Newline-Zeichen.
String.raw`\n`.length // => 2: Ein Backslash und der Buchstabe n.
Obwohl das Tag eines getaggten Template-Literals eine Funktion ist, werden bei ihrem Aufruf keine Klammern verwendet. In diesem sehr speziellen Fall ersetzen die Backticks die öffnende und die schließende Klammer.
Die Möglichkeit, eigene Funktionen für den Einsatz als Tag in Template-Literalen zu definieren, ist ein mächtiges Feature von JavaScript. Diese Funktionen müssen keine Strings zurückgeben und können – als würde man eine zusätzliche Literalsyntax definieren – wie Konstruktoren verwendet werden. Sie werden in 14.5 ein Beispiel kennenlernen.