ECMAScript & Language Versions
Introduction
ECMAScript is the specification; JavaScript is the most popular implementation of it. When people say "ES6 features" they mean features defined in the 6th edition of the ECMAScript standard.
The spec is maintained by TC39, a committee of browser vendors and companies, through a public, staged proposal process.
Why This Matters
Knowing the difference between ECMAScript and JavaScript — and how features graduate through TC39 stages — signals that you understand the ecosystem, not just the syntax. It also explains why tools like Babel and TypeScript exist: to use new syntax before every engine supports it.
Theory
ECMAScript vs JavaScript
- ECMAScript (ECMA-262) is the standard document that defines the language's grammar, types, and semantics.
- JavaScript is an implementation of that standard (with host additions like the DOM in browsers or
fsin Node). - Other implementations exist historically (JScript, ActionScript).
The TC39 proposal process
Every new feature moves through five stages:
| Stage | Name | Meaning |
|---|---|---|
| 0 | Strawperson | An idea. |
| 1 | Proposal | Problem and rough API described. |
| 2 | Draft | Formal spec text; syntax is taking shape. |
| 3 | Candidate | Spec complete; awaiting implementation feedback. |
| 4 | Finished | Shipped in engines; included in the next yearly edition. |
Naming: edition vs year
After ES6, editions are named by year: ES2016, ES2017 … ES2023. "ES6" and "ES2015" are the same thing. Prefer the year names for clarity when discussing recent features.
Transpilation
Because engines adopt features at different speeds, teams write modern syntax and use Babel (transpiler) to down-compile to widely-supported code, and polyfills to add missing runtime APIs.
Visual Diagrams
Idea | [0] Strawperson | [1] Proposal -- problem + rough API | [2] Draft -- formal spec text | [3] Candidate -- implementations + feedback | [4] Finished -- ships in engines, added to yearly edition
TC39's staged process keeps the language stable yet evolving.
Code Examples
Feature detection instead of version checks
You almost never check the ECMAScript version at runtime. Instead, detect whether a feature exists:
Interview Questions
1What is the difference between JavaScript and ECMAScript?
ECMAScript is the language specification (ECMA-262) maintained by TC39. JavaScript is an implementation of that specification, plus host-specific APIs (DOM in the browser, filesystem in Node). Saying an engine "supports ES2021" means it implements that edition of the spec.
2What is TC39 and what are the proposal stages?
TC39 is the technical committee that evolves ECMAScript. Proposals advance through five stages: 0 strawperson, 1 proposal, 2 draft, 3 candidate, 4 finished. A Stage-4 proposal is included in the next annual edition.
Quiz
1. "ES6" and "ES2015" refer to…
2. At which TC39 stage is a feature guaranteed to ship?
Summary
- ECMAScript is the specification; JavaScript is its main implementation.
- TC39 evolves the language through five stages (0–4); Stage 4 ships.
- After ES6, editions are named by year (ES2016+).
- Babel (transpile) and polyfills let teams use new syntax before universal support.
Cheat Sheet
ECMAScript = spec (ECMA-262, by TC39). JavaScript = implementation.
Stages: 0 strawperson → 1 proposal → 2 draft → 3 candidate → 4 finished (ships).
Naming: ES6 == ES2015; after that, year names.
Tooling: Babel = transpile syntax; polyfill = add missing runtime APIs.