0Pricing
Frontend Academy · Урок

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

Встраивайте выражения в строки с помощью шаблонных строк, безопасно обращайтесь к вложенным свойствам через ?. и прерывайте вычисление оператором нулевого слияния ??.

«Шаблонные строки и optional chaining» — бесплатный урок Frontend Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Frontend Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Frontend Academy содержит 4 уроков всего.

Шаблонные литералы: строки в обратных кавычках

Шаблонные литералы (строки в обратных кавычках) поддерживают многострочные строки и встроенные выражения. Они заменяют конкатенацию строк с помощью + и яснее передают замысел кода.

// String concatenation (old way):
const msg = 'Hello, ' + name + '! You have ' + count + ' messages.';

// Template literal (modern):
const msg2 = `Hello, ${name}! You have ${count} messages.`;

Многострочные шаблонные литералы

Шаблонные литералы сохраняют переносы строк и отступы. Больше не нужны \n или конкатенация строк в нескольких строках.

const html = `
  <div class="card">
    <h2>${title}</h2>
    <p>${body}</p>
  </div>
`;

const sql = `
  SELECT *
  FROM users
  WHERE age > ${minAge}
  ORDER BY name
`;

Выражения в шаблонных литералах

Внутри ${} можно разместить любое выражение JavaScript: тернарные выражения, вызовы функций, арифметические операции и вызовы методов.

const tax = 0.2;
const price = 50;
const receipt = `
  Subtotal: $${price}
  Tax (${tax * 100}%): $${price * tax}
  Total: $${price * (1 + tax)}
  ${isPaid ? 'PAID' : 'UNPAID'}
`;

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

Шаблон с тегом вызывает функцию, передавая ей части строки и интерполированные значения в качестве аргументов. Такой подход используют библиотеки styled-components, GraphQL (gql``) и sql`` для безопасного построения запросов.

function highlight(strings, ...values) {
  return strings.reduce((acc, str, i) =>
    acc + str + (values[i] !== undefined ? `<mark>${values[i]}</mark>` : ''), '');
}
const msg = highlight`Hello ${name}, you have ${count} messages.`;

Опциональная цепочка: ?.

Оператор опциональной цепочки ?. возвращает undefined, не вызывая TypeError, если левая часть равна null или undefined. Это избавляет от защитных проверок на null.

const user = null;

// Without optional chaining (throws TypeError):
// user.profile.avatar

// With optional chaining (returns undefined):
const avatar = user?.profile?.avatar;
console.log(avatar); // undefined — no error

Необязательные вызовы методов

obj?.method() вызывает метод, только если obj не равен null или undefined. Если obj равен null, оператор возвращает undefined и не вызывает ошибку.

const timer = getTimer(); // might return null
timer?.start(); // only calls start() if timer exists

// Also works on array access:
const firstItem = arr?.[0]; // undefined if arr is null

Оператор нулевого слияния: ??

Оператор нулевого слияния ?? возвращает правую часть, только если левая равна null или undefined (а не просто имеет ложное значение). В отличие от ||, он не считает 0 или '' нулевыми значениями.

const port = config.port ?? 3000;  // 3000 only if port is null/undefined
const name = user.name ?? 'Anonymous';

// Compare with ||:
console.log(0 ?? 'default');   // 0 (not nullish)
console.log(0 || 'default');   // 'default' (falsy!)

Присваивание при нулевом значении: ??=

a ??= b присваивает b переменной a, только если a равна null или undefined. Это сокращённая запись a = a ?? b. Полезно для условной инициализации свойств объекта.

let cache = {};
function getUser(id) {
  cache[id] ??= fetchUser(id); // only fetch if not cached
  return cache[id];
}

Операторы логического присваивания

&&= выполняет присваивание, только если левая часть имеет истинное значение. ||= выполняет присваивание, только если левая часть имеет ложное значение. Вместе с ??= эти операторы делают условные присваивания лаконичными.

user.name ||= 'Anonymous';  // set if falsy
user.role &&= user.role.toLowerCase(); // transform if exists

Сочетание ?. и ??

Сочетайте опциональную цепочку и нулевое слияние для безопасного обращения к свойствам со значением по умолчанию.

const city = user?.address?.city ?? 'Unknown';
const total = cart?.items?.length ?? 0;

Строковые методы, которые необходимо знать

Распространённые строковые методы: trim(), trimStart(), trimEnd(), padStart(), padEnd(), startsWith(), endsWith(), includes(), replaceAll(), at().

const str = '  Hello World  ';
str.trim();           // 'Hello World'
str.includes('World'); // true
'5'.padStart(3, '0'); // '005'
'abc'.at(-1);         // 'c'
'aabbcc'.replaceAll('b', 'x'); // 'aaxxcc'

Быстрая проверка

Что вернёт const val = obj?.foo?.bar ?? 'default', если obj равен null?

Повторение: шаблонные литералы и опциональная цепочка

Строки в обратных кавычках поддерживают выражения и многострочный формат. Шаблоны с тегами позволяют создавать предметно-ориентированные языки. ?. безопасно обращается к свойствам без проверок на null. ?? задаёт значение по умолчанию, когда значение равно null или undefined, а не просто имеет ложное значение. Сочетайте эти возможности для безопасного и понятного доступа к данным со значениями по умолчанию.

Часто задаваемые вопросы

Урок «Шаблонные строки и optional chaining» бесплатный?

Да — полный текст урока «Шаблонные строки и optional chaining» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Frontend Academy, подпишись на CoddyKit PRO. Курс Frontend Academy содержит 4 уроков всего.

Чему я научусь в уроке «Шаблонные строки и optional chaining»?

Встраивайте выражения в строки с помощью шаблонных строк, безопасно обращайтесь к вложенным свойствам через ?. и прерывайте вычисление оператором нулевого слияния ??. Ты практикуешь Frontend Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Frontend Academy?

Предыдущий опыт не требуется. Frontend Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Шаблонные строки и optional chaining»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Frontend Academy?

Да. Каждый урок Frontend Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Методы массивов: map, filter, reduce, find
  2. Деструктуризация и spread для объектов
  3. Шаблонные строки и optional chaining
  4. Модули: import и export
← Назад к Frontend Academy