> Какие новые возможности JavaScript знаешь (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Сбер

Стек: JavaScript

> Пример ответа

Короткий ответ

Из новых возможностей JavaScript (ES6+) я активно использую: стрелочные функции, async/await, классы, деструктуризацию, spread/rest операторы, Map/Set, Promise, Optional Chaining, Nullish Coalescing, динамические импорты, BigInt, Array.flat/flatMap, Object.fromEntries, логические операторы присваивания (??=, &&=, ||=), Top-level await, WeakRef, Temporal (экспериментальный). В работе применяю их для улучшения читаемости, производительности и безопасности кода.

Подробное объяснение

Новые возможности JavaScript делятся на несколько категорий:

Синтаксический сахар: стрелочные функции (лексический this), классы (синтаксическая надстройка над прототипами), деструктуризация массивов и объектов, rest/spread операторы, шаблонные строки.

Асинхронность: Promise (ES6), async/await (ES8) - упрощают работу с асинхронными операциями, заменяя callback hell. Top-level await (ES2022) позволяет использовать await на уровне модуля.

Работа с данными: Map и Set (ES6) - эффективные коллекции с произвольными ключами и уникальными значениями. WeakMap/WeakSet - для предотвращения утечек памяти. BigInt (ES2020) - для работы с числами больше 2^53.

Безопасность и удобство: Optional Chaining (?.) и Nullish Coalescing (??) (ES2020) - безопасный доступ к вложенным свойствам и fallback для null/undefined.

Иммутабельность и функциональщина: Array.flat/flatMap (ES2019), Object.fromEntries (ES2019), Array.at (ES2022) - удобные методы для трансформации данных.

Динамическая загрузка: динамические импорты (import()) - для code splitting и lazy loading.

Логические операторы присваивания (ES2021): ??=, &&=, ||= - сокращают идиомы присваивания с проверкой.

Экспериментальное: Temporal - новый API для работы с датами и временем (замена Date), WeakRef - слабые ссылки для кэширования.

На практике

В реальных проектах я применяю:

  • Optional Chaining для безопасного доступа к вложенным полям API-ответов: user?.profile?.name ?? 'Аноним'
  • Nullish Coalescing вместо || для корректной обработки 0 и пустой строки
  • Динамические импорты для разделения кода по роутам в React/Vue
  • Map для кэширования данных с объектными ключами (например, DOM-элементов)
  • BigInt при работе с финансовыми данными или ID из бэкенда (например, Telegram ID)
  • flatMap для трансформации и разворачивания массивов в одну операцию
  • Логические операторы присваивания для инициализации свойств объекта: config.timeout ??= 5000

Пример кода

JAVASCRIPT
// Optional Chaining + Nullish Coalescing
const userName = response?.data?.user?.name ?? 'Гость';
// Динамический импорт для ленивой загрузки
const loadChart = () => import('./Chart.js');
// BigInt для больших чисел
const bigId = 9007199254740993n;
// flatMap для трансформации
const words = ['hello world', 'foo bar'];
const allWords = words.flatMap(str => str.split(' ')); // ['hello', 'world', 'foo', 'bar']
// Логическое присваивание
let config = {};
config.timeout ??= 3000; // установит 3000, если timeout undefined/null

Как отвечать на собеседовании

Начни с перечисления ключевых фич, которые реально используешь. Подчеркни практическую пользу: как каждая фича решает конкретную проблему (например, Optional Chaining уменьшает количество проверок на null). Упомяни, что следишь за Stage 3 предложениями (Temporal, Decorators). Покажи понимание trade-off: например, BigInt не совместим с обычными числами в арифметике, а WeakMap не итерируется. Если спросят про устаревшие фичи - скажи, что избегаешь var, arguments, with.

Что проверяет интервьюер

  • Глубину знания современного JS (не просто список фич, а понимание их назначения и ограничений)
  • Опыт применения в production (конкретные кейсы)
  • Осведомлённость о текущем состоянии стандарта (ES2022, ES2023)
  • Умение выбирать правильный инструмент под задачу (например, Map вместо Object для частых добавлений/удалений)
  • Понимание совместимости и транспиляции (Babel, core-js)

Типичные ошибки

  • Путать ?? и || - не учитывать, что || отсекает falsy-значения (0, ''), а ?? только null/undefined
  • Использовать var вместо let/const в новом коде
  • Злоупотреблять async/await без обработки ошибок (try/catch)
  • Пытаться итерировать WeakMap или WeakSet - они не имеют итераторов
  • Использовать BigInt с обычными числами без явного преобразования (TypeError)
  • Забывать, что динамические импорты возвращают Promise, и не обрабатывать ошибки загрузки
  • Применять flatMap там, где нужен map + filter - это разные операции

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью