> Какие новые возможности 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 Coalescingconst 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- это разные операции
> Похожие задачи по frontend
Какие инструменты для стилей вы используете и выделяете ли что-то в JS
Как реализовать функцию, принимающую селектор и возвращающую объект с методами для добавления классов и навешивания событий
Куда пойдет выполнение после запуска промиса в JavaScript
Какие коллекции кроме Set существуют в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью