Javascript Basics: Understanding the Evolution through ECMAScript Standards

Javascript Basics: Understanding the Evolution through ECMAScript Standards


5 min read

JavaScript is an indispensable language for web development, responsible for the dynamic behaviors seen in web applications—everything from animated graphics to complex interactive forms. Since its inception in 1995, JavaScript has undergone significant evolution. This transformation is primarily driven by ECMAScript, the standard specification that serves as the foundation of JavaScript. ECMAScript standards are critical for ensuring consistency across different web browsers and platforms.

In this article, we delve into the essentials of JavaScript through the lens of its various ECMAScript standards, notably ES4, ES5, ES6, and ES2020, offering a comprehensive understanding of their evolution, features, and the nuances of browser support.

The Genesis and Growth of ECMAScript

ECMAScript: The Conception of a Standard

JavaScript's journey began with its creation at Netscape. However, to ensure consistent implementation across different browsers, the language needed standardization, leading to the birth of ECMAScript. The European Computer Manufacturers Association (ECMA) took the initiative to standardize JavaScript, resulting in the ECMAScript Language Specification.

ECMAScript 4 (ES4): The Path Not Taken

Proposed in the late 1990s, ES4 aimed to introduce a stronger typing system, modules, and classes—features that would allow developers to write more robust and maintainable code. Despite its ambition, ES4 faced considerable opposition due to its drastic changes, which many believed would fragment the JavaScript community. The disagreement over ES4's features led to its abandonment and a significant period of stagnation in the standardization process.

ECMAScript 5 (ES5): A Consensus for Advancement

After the fallout of ES4, ES5 emerged as the next official version, released in 2009. ES5 brought substantial enhancements to the language without the contentious aspects of ES4. Its introduction of strict mode, JSON support, and array methods such as forEach, map, and filter marked a notable advancement in the language's capability while maintaining backward compatibility with older JavaScript code.

ECMAScript 6 (ES6): A New Dawn

Released in 2015 and also known as ECMAScript 2015, ES6 represented a monumental update to the language—arguably the most significant since JavaScript's creation. ES6 introduced syntactic sugar for writing more concise code, such as arrow functions, template literals, and destructuring assignments. It also incorporated new concepts like promises for asynchronous programming, classes for object-oriented programming, and modules for structuring large-scale applications.

ECMAScript 2020 (ES2020): The Latest Chapter

Fast forward to June 2020, and the JavaScript community received ES2020, a version that continued the tradition of incremental improvements. ES2020 enhanced the language with features like optional chaining and nullish coalescing, further refining the developer experience. Additionally, it introduced BigInt for handling large integers, Promise.allSettled for managing multiple promises, and dynamic import for optimized loading of modules.

Deep Dive into the Notable ECMAScript Standards

ECMAScript 6 (ES6): The Game Changer

ES6 brought a plethora of features that transformed how developers write JavaScript. Here are some of the standout features:

  • Classes: ES6 classes provided a clearer and more concise syntax for creating objects and managing inheritance, resembling other object-oriented languages.

  • Modules: With ES6 modules, developers could now organize their code into reusable pieces that could be exported and imported as needed.

  • Arrow Functions: Arrow functions not only offered a more concise way to write functions but also lexically bound the this value, making it more predictable.

  • Promises: Promises introduced a new paradigm for handling asynchronous operations, replacing callback patterns that could lead to deeply nested code, often termed "callback hell."

Example: Using ES6 Features

class Person {
  constructor(name) { = name;

  greet() {
    console.log(`Hello, my name is ${}!`);

const john = new Person('John');
john.greet(); // Output: Hello, my name is John!

ECMAScript 2020 (ES2020): Polishing the Experience

The key features of ES2020 are designed to make code more intuitive and robust:

  • Optional Chaining (?.): This allows developers to read the value of a property located deep within a chain of connected objects without having to check that each reference in the chain is valid.

  • Nullish Coalescing (??): This operator provides a way to handle default values, acting only when the operand is null or undefined, which prevents unintended behavior when dealing with falsy values like 0 or ''.

  • Promise.allSettled: Unlike Promise.all, which may reject immediately upon any promise rejecting, `Promise

.allSettled` waits for all promises to settle, giving a full picture of which succeeded and which failed.

  • Dynamic Import: This feature allows developers to load modules on demand, which can lead to performance improvements by reducing the initial loading time of a web page or application.

Example: Utilizing ES2020 Features

let user = {
  profile: {
    name: 'Jane',
console.log(user.profile?.name); // Output: Jane
console.log(user.settings?.theme); // Output: undefined, no error thrown

let undefinedValue;
let defaultGreeting = undefinedValue ?? 'Hello, world!';
console.log(defaultGreeting); // Output: Hello, world!

Browser Support for ES2020

The adoption of new ECMAScript features by browsers is crucial for developers, as it determines the extent to which they can utilize the latest enhancements in their web projects. As of the writing of this article, leading browsers like Google Chrome, Mozilla Firefox, Microsoft Edge, and Apple Safari support the majority of ES2020 features.

Developers must consider browser compatibility when choosing to implement newer features. Tools like Babel can transpile modern JavaScript to older versions for compatibility, and polyfills can provide functionality that is missing in some browsers. Always checking the latest compatibility tables, such as those provided by MDN Web Docs or Can I Use, is essential before integrating new JavaScript features.


The journey through the different ECMAScript versions reflects a dynamic and responsive evolution, with each version building on the strengths and lessons of its predecessors. JavaScript's evolution from ES4's unrealized ambition to ES5's pragmatic consolidation, through ES6's substantial innovations, to ES2020's thoughtful refinements, illustrates the language's maturation and the community's dedication to maintaining its relevance and usability.

JavaScript, powered by the ECMAScript standards, has become more than just a scripting language for websites; it is now a robust programming language capable of powering complex applications across multiple platforms. Understanding the nuances of each ECMAScript version empowers developers to write more effective, efficient, and maintainable code, ensuring the continued success of JavaScript as the backbone of web development.

Did you find this article valuable?

Support 0xTristan by becoming a sponsor. Any amount is appreciated!