Шаблонные строки и 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 — локальная установка не требуется.
Все уроки этого курса
- Методы массивов: map, filter, reduce, find
- Деструктуризация и spread для объектов
- Шаблонные строки и optional chaining
- Модули: import и export