JavaScript has been changing for decades. These are the names you will meet, and what they mean.
A short timeline
| Name | Year | What it means |
|---|---|---|
| ES5 | 2009 | The long-lived baseline. Old code you will see online is often written in this style. |
| ES6 / ES2015 | 2015 | The big update: let, const, arrow functions, classes, modules, promises, template literals and more. |
| ES2016 and later | every June | One small edition each year, adding a few features at a time. |
| ECMAScript 2026 | June 2026 | The 17th edition of the standard (ECMA-262), the latest published one. |
Two naming styles exist for the same editions: ES6 is the same as ES2015, ES7 is ES2016, and so on. After ES6 the committee switched to year names because new editions became small and regular.
What “modern JavaScript” means
There is no official version called “modern JavaScript”. People use it to mean JavaScript written with the features added from ES2015 onward: const and let, arrow functions, template literals, destructuring, modules, async and await, optional chaining and so on. ES6 was not the end of the story. It is where modern JavaScript started.
You do not need to memorise years
Most developers never say “this is an ES2021 feature”. They check whether it works for their users. Before relying on a newer feature:
- Look it up on MDN Web Docs, which has a Browser compatibility table on every page.
- Or check Can I use.
- Decide if your audience’s browsers support it. If not, you can use a polyfill (code that adds the missing feature) or a build tool that rewrites newer syntax into older syntax.
How this course handles new features
The lessons teach features that are stable and useful. When something is recent and browser support may still vary, the lesson says so and shows a safe way to check. Proposals that are not part of the standard yet are not taught as if they were.
// Feature detection: ask whether something exists before using it
if (typeof Object.groupBy === "function") {
console.log("Object.groupBy is available here");
} else {
console.log("Object.groupBy is not available here");
}
Reading old code
var, function everywhere and no arrow functions, you are probably reading ES5-style code. It still works. You will learn why newer code prefers let and const in var, let and const.