Ответ
Стандарты JavaScript определяются спецификацией ECMAScript (ES). Основные версии:
- ES5 (2009) - Добавил strict mode, JSON, методы массивов (map, filter, reduce).
[1,2,3].map(x => x * 2); // [2,4,6]
- ES6/ES2015 - Классы, промисы, стрелочные функции, let/const, модули.
const sum = (a, b) => a + b;
- ES2016-ES2023 - Постепенные обновления:
- async/await (ES2017)
- Опциональная цепочка
?.(ES2020) - Nullish coalescing
??(ES2020) - Top-level await (ES2022)
const user = data?.user ?? 'Guest';
TC39 (комитет по стандартизации) выпускает обновления ежегодно. Современные браузеры и Node.js поддерживают большинство фич ES6+. Для старых сред используют транспайлеры (Babel).
Ответ 18+ 🔞
А, слушай, про эти ваши стандарты JavaScript! Ну, это же просто история о том, как комитет мужиков, которые TC39 называются, каждый год придумывают, как нам жизнь облегчить, а потом мы всё равно на Babel это всё перегоняем, потому что какой-нибудь Internet Explorer ещё не накрылся медным тазом. Вообще пиздец.
Ну, смотри, раньше-то, в 2009 году, был ES5. Это как старый, проверенный дедок. Появился там strict mode, чтобы мы по случайности глобальные переменные не плодили, JSON нормальный добавили и методы для массивов — map, filter, reduce. Ну, вроде жить можно.
[1,2,3].map(x => x * 2); // [2,4,6]
А потом, в 2015, ёпта, случился ES6, он же ES2015. Вот это был, блядь, такой взрыв, что все обосрались со счастья. Классы (ну, синтаксический сахар, но приятно), промисы (чтобы ад колбэков не так сильно пиздел мозг), стрелочные функции (прощай, вечное var self = this), let с const и модули. Красота!
const sum = (a, b) => a + b;
Дальше понеслось. Каждый год, как из рога изобилия, подкидывают по чуть-чуть. ES2017 — async/await, чтобы асинхронный код читать как обычный, ну просто песня. Потом, в ES2020, две офигенные штуки: опциональная цепочка ?. и nullish coalescing ??. Первая — чтобы не писать километровые проверки на undefined, вторая — чтобы не путать ноль и пустую строку с настоящим "ничего".
const user = data?.user ?? 'Guest'; // Если data или data.user — undefined/null, будет 'Guest'. Ноль или пустая строка — останутся.
И так каждый год, в рот меня чих-пых! ES2022 там, top-level await добавили. Короче, движуха.
Но вся соль в том, что эти умные дядьки из TC39 предлагают, а браузеры и Node.js должны это внедрить. И пока они думают, мы ставим Babel, который наш красивый современный код превращает в какую-то дичь, понятную древним браузерам. Вот такая, блядь, история. Вроде всё летит вперёд, а оглянуться — а за нами ещё целый воз этих IE11 тащится. Пиздец, короче.