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

  1. ES2027Upcoming
    • Already finished: Temporal (a modern date and time API), using declarations for automatic cleanup (explicit resource management), Map.prototype.getOrInsert (upsert), iterator chunking and joining
  2. ES2026Latest
    • RegExp.escape(), Math.sumPrecise(), Error.isError(), Array.fromAsync()
    • Uint8Array to/from Base64 and hex, Iterator.concat(), source text access in JSON.parse
  3. ES2025Published
    • Iterator helpers (.map(), .filter(), .take() on any iterator), new Set methods (union, intersection, …)
    • Promise.try(), JSON modules with import attributes, RegExp modifiers, Float16Array
  4. ES2024Published
    • Object.groupBy() / Map.groupBy(), Promise.withResolvers(), the RegExp v flag, resizable ArrayBuffer
  5. ES2023Published
    • Change arrays by copy: toSorted(), toReversed(), toSpliced(), with(); findLast()
  6. ES2022Published
    • Class fields and private #members, top-level await in modules, .at(), Object.hasOwn(), error cause
  7. ES2021Published
    • replaceAll(), Promise.any(), logical assignment ??= ||= &&=, numeric separators 1_000_000
  8. ES2020Published
    • Optional chaining ?., nullish coalescing ??, BigInt, dynamic import(), globalThis
  9. ES2019Published
    • flat() / flatMap(), Object.fromEntries(), optional catch binding
  10. ES2018Published
    • Object rest/spread {...obj}, async iteration for await, Promise.finally()
  11. ES2017Published
    • async / await, Object.entries() / Object.values(), padStart() / padEnd()
  12. ES2016Published
    • The exponent operator ** and Array.prototype.includes(); the first of the yearly editions
  13. ES2015Published
    • Also called ES6. The biggest update ever: let/const, arrow functions, classes, modules, promises, template literals, destructuring, Map/Set, iterators and generators
  14. ES5Historic
    • Strict mode, native JSON, array methods forEach, map, filter, reduce, and getters/setters (ES5.1 followed in 2011)
  15. ES4Historic
    • Abandoned: an ambitious redesign that the committee could not agree on; the work restarted as "Harmony"
  16. ES3Historic
    • Regular expressions, try / catch, better string handling; the version the web ran on for ten years
  17. ES1Historic
    • The first standard, based on Netscape's JavaScript 1.1
  18. 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

Last reviewed 21 October 2026. Release and support dates come from the official release pages linked above.