Template-Literale
`text ${expression} text`
Text in Backticks `…` kann Ausdrücke ${…} enthalten, die eingesetzt werden, und über mehrere Zeilen gehen. Er ersetzt das Zusammensetzen von Zeichenketten mit +.
Parameter
- ${expression} – ein beliebiger Ausdruck; das Ergebnis wird in eine Zeichenkette umgewandelt.
- tag`…` – eine Funktion vor dem Template erhält die Textteile und die Werte der Ausdrücke getrennt (Tagged Template).
Rückgabewert
Eine Zeichenkette (bei einem Tag das, was die Funktion zurückgibt).
Beispiele
const product = { name: 'Kaffee', price: 17.9, qty: 2 };
console.log(`${product.name}: ${product.qty} × ${product.price} EUR = ${product.qty * product.price} EUR`);
console.log(`Auf Lager: ${product.qty > 0 ? 'ja' : 'nein'}`);
const html = `<li>
${product.name}
</li>`;
console.log(html);
Ausgabe:
Kaffee: 2 × 17.9 EUR = 35.8 EUR Auf Lager: ja <li> Kaffee </li>
Ein Tag, der die Werte für HTML maskiert:
const esc = (s) => String(s).replace(/[&<>"']/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c]);
const safe = (parts, ...values) => parts.reduce((v, p, i) => v + esc(values[i - 1]) + p);
const name = '<script>alert(1)</script>';
console.log(safe`<p>Hallo, ${name}</p>`);
Ausgabe:
<p>Hallo, <script>alert(1)</script></p>
Worauf Sie achten sollten
- Werte vom Benutzer, die mit
${…}undinnerHTMLins HTML gelangen, ermöglichen XSS. Fügen Sie Text mittextContentein oder maskieren Sie die Werte. - Die Einrückung innerhalb eines mehrzeiligen Templates gehört zur Zeichenkette.
Browserunterstützung
Baseline – weithin verfügbar: in allen gängigen Browsern seit September 2015, gilt als weithin verfügbar seit März 2018. Ab Version: Chrome 41, Firefox 34, Safari 9; Node.js 4.0.0. Stand: Oktober 2026 (MDN browser-compat-data).