3.1 Вкладені вирази
У шаблонних літералах можна використовувати будь-які вирази, включаючи виклики функцій, тернарні оператори і шаблонні літерали всередині шаблонних літералів.
Приклад:
У виразі ${a + b} виконується математична операція, і результат вставляється в рядок result.
const a = 5;
const b = 10;
const result = `The result of ${a} + ${b} is ${a + b}.`;
console.log(result); // "The result of 5 + 10 is 15."
3.2 Вкладені шаблонні літерали
Шаблонні літерали можуть бути вкладені, що дозволяє створювати складні рядки.
Приклад:
Виклик методу greet() об’єкта user вкладений у шаблонний літерал message.
const user = {
name: 'Bob',
age: 25,
greet() {
return `Hello, ${this.name}!`;
}
};
const message = `${user.greet()} You are ${user.age} years old.`;
console.log(message); // "Hello, Bob! You are 25 years old."
3.3 Теговані шаблонні літерали (Tagged Templates)
Теговані шаблонні літерали дозволяють викликати функцію для обробки шаблонних рядків. Це дає можливість виконувати додаткові маніпуляції з рядками, такі як інтернаціоналізація, безпечна вставка HTML тощо.
Синтаксис:
function tag(strings, ...values) {
// обробка рядків і значень
return результат;
}
const result = tag`Шаблонний рядок з ${змінна}`;
Приклад:
Функція highlight() обробляє рядки і значення, обгортаючи значення в HTML-теги <span> з класом highlight.
function highlight(strings, ...values) {
return strings.reduce((result, str, i) =>
`${result}${str}${values[i] || ''}`, '');
}
const name = 'Carol';
const hobby = 'painting';
const message = highlight`My name is ${name} and I love ${hobby}.`;
console.log(message);
// "My name is <span class="highlight">Carol</span> and I love <span class="highlight">painting</span>."
3.4 Безпечна вставка значень
Шаблонні літерали допомагають уникнути деяких поширених проблем із безпекою, таких як XSS (міжсайтовий скриптинг), шляхом безпечної вставки значень. Це особливо корисно при вставці даних користувача в HTML.
Приклад:
Функція safeHTML() замінює небезпечні символи в значеннях, запобігаючи XSS-атакам.
function safeHTML(strings, ...values) {
return strings.reduce((result, str, i) =>
`${result}${str}${String(values[i]).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')}`, '');
}
const userInput = '<script>alert("XSS")</script>';
const message = safeHTML`User input: ${userInput}`;
console.log(message);
// "User input: <script>alert("XSS")</script>"
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ