Skip to content

Instantly share code, notes, and snippets.

@mz0
Last active May 5, 2025 16:25
Show Gist options
  • Save mz0/9f4156f71af193aad5092bad8f3a3996 to your computer and use it in GitHub Desktop.
Save mz0/9f4156f71af193aad5092bad8f3a3996 to your computer and use it in GitHub Desktop.
JavaScript history bits

JavaScript

was built in only 10 days in 1995 by a single person, Brendan Eich, who was tasked with building a simple scripting language to be used in version 2 of the Netscape browser. It was initially called LiveScript, but since the Java language was so popular at the time, the name was changed to JavaScript - although Java and JavaScript are in no way related.

For the first few years, after it was built, JavaScript was a simple scripting language to add mouseover effects and other interactivity. Those effects were being added to webpages using the <script> HTML element.

Inside each of the script elements, there could be some JavaScript code. Due to the rule that HTML, CSS, and JavaScript must be backward compatible, even the most advanced code written in JavaScript today ends up being written between those script tags. (??)

Over the years, JavaScript grew ever more powerful, and in recent times, it's continually touted as among the top three commonly used languages.

In 1996 Netscape made a deal with the organization known as ECMA (European Computer Manufacturers Association) to draft the specification of the JavaScript language, and in 1997 the first edition of the ECMAScript specification was published as the ECMA-262 standard.

There have been more than 12 ECMA-262 updates.

  1. ES1 (ECMAScript 1st Edition) - June 1997: The initial standard, providing the foundational syntax and core features of the JavaScript language.
  2. ES2 (ECMAScript 2nd Edition) - June 1998: Minor editorial changes to align with ISO/IEC 16262.
  3. ES3 (ECMAScript 3rd Edition) - December 1999: Introduced significant features like try...catch for error handling, regular expressions, switch statements, and improved support for internationalization.
  4. ES5 (ECMAScript 5th Edition) - December 2009: Brought about important enhancements such as strict mode ("use strict"), JSON support, and new methods for arrays (forEach, map, filter, etc.) and objects (Object.create, Object.defineProperty, etc.)
  5. ES6 (ECMAScript 2015) - June 2015: A major revision introducing classes, modules, arrow functions, let and const declarations, promises, iterators and generators, template literals, destructuring, default parameters, Symbol primitive, and more.
  6. ES2016 (ECMAScript 2016) - June 2016: Added the Array.prototype.includes() method and the exponentiation operator (**)
  7. ES2017 (ECMAScript 2017) - June 2017: Introduced async/await for asynchronous operations, Object.values(), Object.entries(), and string padding methods.
  8. ES2018 (ECMAScript 2018) - June 2018: Featured asynchronous iteration (for-await-of), rest/spread properties for objects, and promise finally.
  9. ES2019 (ECMAScript 2019) - June 2019: Included Array.prototype.flat() and flatMap(), Object.fromEntries(), and String.prototype.trimStart()/trimEnd().
  10. ES2020 (ECMAScript 2020) - June 2020: Introduced BigInt for arbitrary-precision integers, beyond the limitations of the standard Number type (-9.0×10^15 .. 9.0×10^15), Promise.allSettled(), nullish coalescing operator (??), and optional chaining (?.)
  11. ES2021 (ECMAScript 2021) - June 2021: Added String.prototype.replaceAll(), Promise.any(), logical assignment operators (&&=, ||=, ??=), and numeric separators (_)
  12. ES2022 (ECMAScript 2022) - June 2022: Introduced top-level await, class fields and static class members, and Error.cause.
  13. ES2023 (ECMAScript 2023) - June 2023: Added methods for finding from the end of an array (Array.prototype.findLast() and Array.prototype.findLastIndex()) and the ability to change array by copy (Array.prototype.toReversed(), toSorted(), toSpliced(), with())
  14. ES2024 (ECMAScript 2024) - June 2024: Pattern matching, also Array.prototype.findLast() and findLastIndex() (already in some implementations), Atomics.waitAsync(), resizable ArrayBuffer and growable SharedArrayBuffer, and more.

You may see that after ES6, the ECMAScript standard shifted to annual releases with the year of finalization in the name. So, instead of ES7, ES8, etc., we have ES2016, ES2017, and so on.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment