Какие есть стандарты JavaScript
Что проверяют
Понимаете ли вы, что JavaScript как язык описан стандартом ECMAScript, а всё, что относится к браузеру, живёт в других спецификациях. Следом обычно спрашивают, как новые возможности попадают в стандарт и как вы запускаете современный код в старых браузерах.
Как отвечать
Начните с устройства:
- ECMA-262: сама спецификация языка, её ведёт комитет TC39. С 2015 года редакции выходят каждый год и называются по году: ES2015, ES2016 и так далее;
- ECMA-402: API интернационализации, объект
Intlс форматированием дат, чисел и сравнением строк; - процесс TC39: предложение проходит стадии от 0 до 4 (недавно между второй и третьей добавили стадию 2.7). В стандарт попадает то, что дошло до стадии 4 и уже работает минимум в двух движках;
- веб-стандарты WHATWG и W3C: DOM,
fetch, HTML Living Standard. Это не ECMAScript, поэтому в Node.js нетdocument, хотя язык тот же.
Дальше назовите вехи. ES5 (2009) дал строгий режим, JSON, методы массивов map и filter. ES2015 стал самым крупным обновлением: let и const, классы, стрелочные функции, промисы, модули, деструктуризация. Потом шаги маленькие, но ежегодные: async/await в ES2017, ?. и ?? в ES2020, приватные поля #x и top-level await в ES2022, toSorted и findLast в ES2023, Object.groupBy в ES2024, методы итераторов и Set.prototype.union в ES2025.
Закончите практикой: какие браузеры поддерживать, решает browserslist, синтаксис понижают Babel, SWC или esbuild, а недостающие методы добавляют полифилы из core-js.
Где спотыкаются
Называют последней версией ES6 и считают, что после 2015 года язык не менялся. Интервьюер спросит про ?? или Object.groupBy, и ответ рассыплется.
Путают стандарт языка с API браузера. fetch, localStorage и setTimeout в ECMAScript не описаны, это спецификации WHATWG.
Смешивают транспиляцию и полифилы. Babel перепишет стрелочную функцию, но Array.prototype.at в старом браузере от этого не появится, нужен полифил. Туда же путаница с TypeScript и стайлгайдами вроде Airbnb: к стандартам языка они не относятся.