JavaScript Tutorial · JavaScript Basics · Lesson 13 of 44
JavaScript History & Versions
How JavaScript was created in ten days at Netscape, why its standard is called ECMAScript, every edition from ES1 to ES2026 on one timeline, what ES2015 changed, and how new features reach your browser today.
How JavaScript started
In May 1995, Brendan Eich, newly hired at Netscape Communications, wrote the first version of a scripting language for the Netscape Navigator browser in about ten days. Netscape wanted something easy enough for designers and hobbyists to glue web pages together, complementing Java, which was aimed at professional programmers. The language was called Mocha, then LiveScript, and was renamed JavaScript in December 1995 as part of a marketing partnership with Sun Microsystems. Apart from some syntax, it has little to do with Java.
JavaScript shipped in Netscape Navigator 2.0 in early 1996, and Microsoft answered with its own implementation, JScript, in Internet Explorer 3 later that year. To avoid two incompatible languages, Netscape handed the language to Ecma International for standardization. Because "JavaScript" was a Sun trademark (now owned by Oracle), the standard is called ECMAScript (ECMA-262). The committee that evolves it is TC39, made up of browser makers, companies and community members.
Timeline of ECMAScript editions
- ES2027Upcoming
- Already finished:
Temporal(a modern date and time API),usingdeclarations for automatic cleanup (explicit resource management),Map.prototype.getOrInsert(upsert), iterator chunking and joining
- Already finished:
- ES2026Latest
RegExp.escape(),Math.sumPrecise(),Error.isError(),Array.fromAsync()Uint8Arrayto/from Base64 and hex,Iterator.concat(), source text access inJSON.parse
- ES2025Published
- Iterator helpers (
.map(),.filter(),.take()on any iterator), newSetmethods (union,intersection, …) Promise.try(), JSON modules with import attributes, RegExp modifiers,Float16Array
- Iterator helpers (
- ES2024Published
Object.groupBy()/Map.groupBy(),Promise.withResolvers(), the RegExpvflag, resizableArrayBuffer
- ES2023Published
- Change arrays by copy:
toSorted(),toReversed(),toSpliced(),with();findLast()
- Change arrays by copy:
- ES2022Published
- Class fields and private
#members, top-levelawaitin modules,.at(),Object.hasOwn(), errorcause
- Class fields and private
- ES2021Published
replaceAll(),Promise.any(), logical assignment??=||=&&=, numeric separators1_000_000
- ES2020Published
- Optional chaining
?., nullish coalescing??,BigInt, dynamicimport(),globalThis
- Optional chaining
- ES2019Published
flat()/flatMap(),Object.fromEntries(), optionalcatchbinding
- ES2018Published
- Object rest/spread
{...obj}, async iterationfor await,Promise.finally()
- Object rest/spread
- ES2017Published
async/await,Object.entries()/Object.values(),padStart()/padEnd()
- ES2016Published
- The exponent operator
**andArray.prototype.includes(); the first of the yearly editions
- The exponent operator
- ES2015Published
- Also called ES6. The biggest update ever:
let/const, arrow functions, classes, modules, promises, template literals, destructuring,Map/Set, iterators and generators
- Also called ES6. The biggest update ever:
- ES5Historic
- Strict mode, native
JSON, array methodsforEach,map,filter,reduce, and getters/setters (ES5.1 followed in 2011)
- Strict mode, native
- ES4Historic
- Abandoned: an ambitious redesign that the committee could not agree on; the work restarted as "Harmony"
- ES3Historic
- Regular expressions,
try/catch, better string handling; the version the web ran on for ten years
- Regular expressions,
- ES1Historic
- The first standard, based on Netscape's JavaScript 1.1
- JavaScript 1.0Historic
- Shipped in Netscape Navigator 2.0, months after the language was written in ten days
How JavaScript modernized
- From page scripts to applications. Gmail (2004) and Google Maps (2005) showed what "Ajax" apps could do, and libraries such as jQuery (2006) smoothed over browser differences.
- Fast engines. Google's V8 engine (2008, in Chrome) compiled JavaScript to machine code and started a performance race between browsers.
- JavaScript outside the browser. Node.js (2009) put V8 on servers, and npm became the largest package registry in the world. Today JavaScript also runs in Deno, Bun, mobile apps and serverless platforms.
- ES2015 and yearly releases. After ES4 failed, TC39 delivered the large ES2015 update and then switched to smaller yearly editions. Every feature now goes through a public stage 0–4 process, and it ships in the next June edition once it reaches stage 4 with two implementations.
- Typed JavaScript. TypeScript (2012) added optional static types on top of JavaScript and is now used by most large JavaScript projects. See the TypeScript history.
ES5 vs modern JavaScript (ES2015+)
| Task | ES5 (2009) | Modern JavaScript |
|---|---|---|
| Variables | var x = 1; (function-scoped) |
let x = 1; const y = 2; (block-scoped) |
| Functions | function (a) { return a * 2; } |
(a) => a * 2 |
| Strings | "Hi " + name + "!" |
`Hi ${name}!` |
| Objects | var x = o.x, y = o.y; |
const { x, y } = o; |
| Classes | Constructor functions + prototype |
class Dog extends Animal { ... } |
| Modules | Script tags, IIFEs, CommonJS require() |
import / export |
| Async code | Nested callbacks | Promises and async / await |
| Safe property access | a && a.b && a.b.c |
a?.b?.c |
| Defaults | x = x !== undefined ? x : 10; |
x ?? 10 or a default parameter |
Which version should you use?
There is no "JavaScript version" to install: browsers and runtimes add features one at a time. Practical rules:
- Write modern JavaScript (ES2020+) freely. All current browsers and Node.js support it.
- For the newest features, check browser support on MDN or Can I use, or look for the Baseline label ("widely available" means it works in all major browsers for at least 30 months).
- Use a build tool (Vite, esbuild, TypeScript) to compile newer syntax down for older browsers only if you must support them.
- This tutorial: examples run in your browser's own JavaScript engine.
Official resources
- ECMAScript specification (ECMA-262), the living draft of the standard
- Ecma International: ECMA-262 editions
- TC39 proposals and the finished proposals by year
- MDN JavaScript reference
- Baseline: which web features work in all major browsers
- Node.js, the most used server-side JavaScript runtime
Last reviewed 21 October 2026. Release and support dates come from the official release pages linked above.