JS Tower
JavaScript & TypeScriptМодуль 3: Строки и числа

Шаблонные строки

Интерполяция и многострочные строки

Цель урока

В этом уроке ты научишься:

  • Использовать шаблонные строки
  • Вставлять выражения в строки
  • Создавать многострочные строки

Синтаксис

Шаблонные строки используют обратные кавычки `:

let name = "Иван";

// Обычная строка
let greeting1 = "Привет, " + name + "!";

// Шаблонная строка
let greeting2 = `Привет, ${name}!`;

console.log(greeting1); // "Привет, Иван!"
console.log(greeting2); // "Привет, Иван!"

Интерполяция

Внутри ${} можно использовать любые выражения:

let a = 5;
let b = 3;

console.log(`${a} + ${b} = ${a + b}`);
// "5 + 3 = 8"

console.log(`${a} > ${b}: ${a > b}`);
// "5 > 3: true"

console.log(`Квадрат: ${a ** 2}`);
// "Квадрат: 25"

Вызов функций

function getGreeting(name) {
  return `Привет, ${name}!`;
}

console.log(`Сообщение: ${getGreeting("Мария")}`);
// "Сообщение: Привет, Мария!"

Вызов методов

let name = "иван";

console.log(`Имя: ${name.toUpperCase()}`);
// "Имя: ИВАН"

Тернарный оператор

let age = 20;

console.log(`Статус: ${age >= 18 ? "взрослый" : "ребёнок"}`);
// "Статус: взрослый"

Многострочные строки

// Обычная строка — нужен \n
let text1 = "Строка 1\nСтрока 2\nСтрока 3";

// Шаблонная строка — просто переносы
let text2 = `Строка 1
Строка 2
Строка 3`;

console.log(text1);
console.log(text2);

HTML-шаблоны

let user = {
  name: "Иван",
  age: 25,
  city: "Москва"
};

let html = `
<div class="user-card">
  <h2>${user.name}</h2>
  <p>Возраст: ${user.age}</p>
  <p>Город: ${user.city}</p>
</div>
`;

console.log(html);

Вложенные шаблоны

let items = ["яблоко", "банан", "апельсин"];

let list = `
<ul>
  ${items.map(item => `<li>${item}</li>`).join("\n  ")}
</ul>
`;

console.log(list);
// <ul>
//   <li>яблоко</li>
//   <li>банан</li>
//   <li>апельсин</li>
// </ul>

Экранирование

// Обратная кавычка внутри шаблона
console.log(`Используй \`обратные кавычки\``);

// Символ $
console.log(`Цена: \$100`);

// Или просто
console.log(`Цена: ${"$"}100`);

Tagged Templates

Функция может обрабатывать шаблонную строку:

function highlight(strings, ...values) {
  let result = "";
  strings.forEach((str, i) => {
    result += str;
    if (values[i] !== undefined) {
      result += `**${values[i]}**`;
    }
  });
  return result;
}

let name = "Иван";
let age = 25;

console.log(highlight`Имя: ${name}, возраст: ${age}`);
// "Имя: **Иван**, возраст: **25**"

Применение

Tagged templates используются в библиотеках: styled-components, GraphQL и других.


Практика

Задание 1: Форматирование

Задача: Создай сообщение о пользователе.

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
Мария, 28 лет, Санкт-Петербург

Задание 2: Условный текст

Задача: Выведи приветствие в зависимости от времени суток.

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
Добрый день

Задание 3: Генерация списка

Задача: Создай HTML-список из массива.

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
<ul><li>Яблоко</li><li>Банан</li><li>Апельсин</li></ul>

Проверь себя

  1. Какой символ используется для шаблонных строк?
  2. Как вставить выражение в шаблонную строку?
  3. Как создать многострочную строку?