Если в коде или документации встречается пометка «ES6», «ES2015» или «ES-модуль», речь идёт о версии стандарта ECMAScript — формального описания языка, лежащего в основе JavaScript. Именно эта аббревиатура чаще всего скрывается за запросом «что такое ES», и путаница возникает из-за того, что одни и те же возможности языка называют то «ES6», то «ES2015», то просто «современный JavaScript».
Разобраться здесь важно не только начинающим разработчикам: от версии ES зависит, какие конструкции языка можно использовать в проекте, нужен ли транспилятор вроде Babel и будет ли код работать в старых браузерах. Ниже разберём, что такое ECMAScript, чем он отличается от JavaScript, какие версии существуют и как проверить их поддержку.
ES и ECMAScript: что скрывается за аббревиатурой
ECMAScript (сокращённо ES) — это официальный стандарт языка сценариев, который описывает синтаксис, типы данных, объекты и правила работы языка. Стандарт разрабатывается организацией Ecma International и публикуется в документе ECMA-262. Сам по себе ES — это не программа и не интерпретатор, а спецификация: текст, по которому создатели браузеров и движков реализуют язык.
JavaScript — самая известная реализация этого стандарта. Грубо говоря, ECMAScript определяет «как язык должен работать», а JavaScript — конкретное воплощение этих правил в движках вроде V8 (Chrome, Node.js), SpiderMonkey (Firefox) и JavaScriptCore (Safari). В повседневной речи разработчики часто смешивают термины, но в технических обсуждениях «ES» означает именно стандарт и его версии.
Важно понимать, что браузерный JavaScript включает больше, чем ECMAScript: работа с DOM, события, сетевые запросы описываются отдельными веб-стандартами. Поэтому, когда говорят «это поддерживается с ES6», речь идёт о ядре языка — синтаксисе и встроенных объектах, а не о браузерных API.
ES — это стандарт языка (ECMA-262), а JavaScript — его практическая реализация в движках браузеров и Node.js.
Версии ES: от ES5 до современных выпусков
Нумерация версий ECMAScript исторически сбивала с толку. До 2015 года стандарты выходили нерегулярно и обозначались номером редакции: ES3, ES5. Начиная с 2015 года комитет TC39 перешёл на ежегодный цикл релизов, и версии стали обозначаться по году: ES2015, ES2016 и так далее. При этом за ES2015 закрепилось неформальное имя ES6, которое используется до сих пор.
Именно ES6/ES2015 стал переломным: он добавил классы, стрелочные функции, let и const, шаблонные строки, промисы и модули. Последующие ежегодные версии вносили более точечные изменения — например, async/await появился в ES2017. Ниже — ориентировочная сводка ключевых версий.
| Версия | Год | Ключевые нововведения |
|---|---|---|
| ES5 | 2009 | Строгий режим, методы массивов map, filter, JSON |
| ES6 / ES2015 | 2015 | Классы, let/const, стрелочные функции, промисы, модули |
| ES2016 | 2016 | Оператор **, метод Array.prototype.includes |
| ES2017 | 2017 | Асинхронные функции async/await |
| ES2020 | 2020 | Опциональная цепочка ?., нулевое слияние ?? |
Конкретный перечень возможностей каждой версии стоит сверять с официальной спецификацией ECMA-262 или справочником MDN Web Docs, поскольку таблица выше отражает лишь наиболее известные изменения.
Чем ES отличается от JavaScript
Этот вопрос задают почти все, кто впервые сталкивается с терминологией. Разница проста по сути, но важна на практике:
- 📜 ECMAScript — стандарт-спецификация, документ, описывающий язык;
- ⚙️ JavaScript — реализация стандарта в конкретных движках и средах;
- 🌐 DOM и Web API — браузерные расширения, не входящие в ECMAScript;
- 🧩 Диалекты — JScript, ActionScript и другие исторические реализации того же стандарта.
На практике это означает: если функция описана в стандарте ES2020, она рано или поздно появится во всех основных движках, но сроки внедрения различаются. Поэтому одна и та же конструкция может работать в свежем Chrome и отсутствовать в устаревшем браузере.
ES-модули: что это и почему о них все говорят
Отдельного упоминания заслуживает система модулей, введённая в ES2015. ES-модули (ESM) — это стандартный способ разбивать код на файлы и подключать их через import и export. До их появления в экосистеме использовались нестандартные форматы вроде CommonJS (команда require в Node.js).
Пример синтаксиса ES-модуля:
// math.js
export function sum(a, b) {
return a + b;
}
// app.js
import { sum } from './math.js';
В браузере ES-модули подключаются через атрибут type="module" в теге скрипта, а в Node.js поддержка зависит от версии среды и расширения файла (.mjs либо настройка в package.json). Поведение отличается между средами, поэтому конкретный способ подключения стоит проверять в документации используемой платформы.
Чтобы браузер корректно обработал файл как ES-модуль, подключайте его через