Skip to main content

A Comprehensive Guide to JavaScript ECMAScript Versions

JavaScript is a dynamic, interpreted programming language that has become ubiquitous for web development. It is frequently updated with new features and capabilities, which are standardized under the ECMAScript specification. In this blog post, we will explore the different versions of ECMAScript, their key features.


The History of ECMAScript

The first version of ECMAScript, ECMAScript 1, was standardized in 1997. It was based on the JavaScript language, which had been developed by Netscape in 1995. ECMAScript 1 introduced the core syntax and features of JavaScript, including variables, functions, objects, and arrays.

Over the years, ECMAScript has undergone several revisions, each adding new features and improvements to the language. Versions:

  • ECMAScript 2 (1998)
  • ECMAScript 3 (1999)
  • ECMAScript 5 (2009)
  • ECMAScript 6 (2015)
  • ECMAScript 7 (2016)
  • ECMAScript 8 (2017)
  • ECMAScript 9 (2018)
  • ECMAScript 10 (2019)
  • ECMAScript 11 (2020)
  • ECMAScript 12 (2021)
  • ECMAScript 13 (2022)
  • ECMAScript 14 (2023)

Key Features of ECMAScript Versions

Each version of ECMAScript has introduced new features that have expanded the capabilities of JavaScript. Here is a summary of some of the key features introduced in different ECMAScript versions:


ECMAScript 6 (ES6)

Finalized in June 2015, ECMAScript 2015, also known as ES6, introduced significant new syntax for writing complex applications. Key features include:

  • Class declarations (class Foo { ... })
  • ES6 modules (import/export)
  • Iterators and for...of loops
  • Python-style generators
  • Arrow function expressions (() => {...})
  • let and const keywords for variable declarations
  • Binary data
  • Typed arrays
  • New collections (maps, sets, and WeakMaps)
  • Promises
  • Number and math enhancements
  • Reflection
  • Proxies
  • Template literals using backticks (`)

ECMAScript 7

Finalized in June 2016, ECMAScript 2016 introduced:
  • Block-scoping of variables and functions
  • Destructuring patterns
  • Proper tail calls
  • Exponentiation operator (**)
  • await and async keywords for asynchronous programming
  • Array.prototype.includes function


ECMAScript 8

Finalized in June 2017, ECMAScript 2017 brought:
  • Object.values, Object.entries, and Object.getOwnPropertyDescriptors functions
  • async/await constructions using generators and promises
  • Additional features for concurrency and atomics
  • String.prototype.padStart()


ECMAScript 9

Finalized in June 2018, ECMAScript 2018 introduced:
  • Spread operator and rest parameters (...) for object literals
  • Asynchronous iteration
  • Promise.prototype.finally
  • Additions to RegExp


ECMAScript 10

Published in June 2019, ECMAScript 2019 added:
  • Array.prototype.flat and Array.prototype.flatMap
  • Changes to Array.sort
  • Object.fromEntries


ECMAScript 11

    Published in June 2020, ECMAScript 2020 introduced:
    • BigInt primitive type for arbitrary-sized integers
    • Nullish coalescing operator (??)
    • globalThis object


    ECMAScript 12

    Published in June 2021, ECMAScript 2021 added:

    • replaceAll method for strings
    • Promise.any
    • AggregateError
    • Logical assignment operators (??=, &&=, ||=)
    • WeakRef
    • FinalizationRegistry
    • Separators for numeric literals
    • Array.prototype.sort precision enhancements


    ECMAScript 13

    Published in June 2022, ECMAScript 2022 introduced:
    • Top-level await
    • New class elements (public/private fields, methods, accessors, and static blocks)
    • Syntax for testing presence of private fields (#x in obj)
    • Regular expression match indices via /d flag
    • Error objects with cause property
    • at method for Strings, Arrays, and TypedArrays
    • Object.hasOwn

    ECMAScript 14

    Published in June 2023, ECMAScript 2023 introduced:
    • New methods on Array.prototype and TypedArray.prototype (toSorted, toReversed, with, findLast, findLastIndex)
    • toSpliced method on Array.prototype
    • Support for #! shebang comments
    • Allowed use of most Symbols as keys in weak collectio

    ES.Next

    ES.Next refers to the upcoming version of ECMAScript. It includes features that are still in the proposal stage and may be incorporated into future versions.


    Positive Impact

    Here are some specific examples of how ECMAScript versions have postively impacted JavaScript:

    • ECMAScript 5's strict mode helped to reduce the number of errors in JavaScript code by enforcing stricter rules.
    • ECMAScript 6's arrow functions made it easier to write concise and readable code.
    • ECMAScript 7's async/await syntax made it easier to write asynchronous code that is more maintainable and easier to reason about.
    • ECMAScript 2018's spread operator made it easier to work with arrays and objects.
    • ECMAScript 2019's optional chaining made it easier to access nested properties of objects without having to worry about null or undefined values.


    ECMAScript Version Support

    Different ECMAScript versions are supported by different JavaScript engines and browsers. It is important to be aware of the ECMAScript version support of your target environment when developing JavaScript applications.

    You can use the following resources to check the ECMAScript version support of different browsers and JavaScript engines:

    Can I use

    MDN Web Docs


    Conclusion

    ECMAScript versions have played a crucial role in the evolution of JavaScript. Each new version has introduced new features and improvements that have expanded the capabilities of the language and made it more expressive, efficient, and maintainable. As JavaScript continues to evolve, we can expect future versions of ECMAScript to bring even more exciting features and capabilities to the language.

    Comments

    Archive

    Show more

    Topics

    Show more