bugl
bugl
HomeLearnPatternsPathsSearch
HomeLearnPatternsPathsSearch

Loading lesson path

Learn/JavaScript/Debugging, Projects, and Reference
JavaScript•Debugging, Projects, and Reference

ECMAScript 2026

Flash cards

Review the key moves

1/4
Core idea

What is the main idea behind ECMAScript 2026?

Lesson checks

Practice each idea before moving on

Short Mimo-style checks built from this lesson's code, terms, and sequence.

1Quick choice

Which statement best captures the main point of this lesson?

2Fill blank

Complete the missing token from the example code.

___ MyResource {
3Order

Put the learning moves in the order that makes the concept easiest to apply.

Error Detection with Error.isError()
Resource Management with using
New Features in JavaScript 2026

New Features in JavaScript 2026

ECMAScript 2026 introduces several features focused on improving resource management, handling asynchronous operations, and enhancing data manipulation:

  • New JavaScript Date Object - Temporal Date
  • Resource management with using and await using
  • Error detection with Error.isError()
  • Asynchronous array creation with Array.fromAsync()
  • Base64 and hexadecimal encodings for Uint8Array
  • Immutability with Records & Tuples (Stage 3 proposal)
  • Pattern Matching (Stage 3 proposal)

The Temporal API

The Temporal API in JavaScript 2026 provides standard objects and functions for working with dates and times.

From ES2026, the Temporal API is the standard for modern date and time management in JavaScript, designed to replace the legacy Date object.

Unlike Date, Temporal objects are immutable and provide first-class support for time zones and non-Gregorian calendars.

Resource Management with using

JavaScript 2026 added two keywords to automatically manage and dispose resources (like file handles or database connections) when they go out of scope, reducing the need for explicit try...finally blocks.

  • using provides synchronous cleanup of block-scoped variables.
  • await using provides asynchronous cleanup for resources like network streams.

Error Detection with Error.isError()

Error.isError() is a static method to reliably check if a value is an Error object, improving error handling and debugging.

New Array with Array.fromAsync()

Array.fromAsync() is a feature that allows developers to create a new Array instance from asynchronous iterables, array-like objects, or Promises, streamlining the handling of data from async sources.

New Uint8Array Methods in ES2026

Base64 and Hexadecimal Encodings for Uint8Array.

These new static methods facilitate working with binary data by adding direct conversion between Uint8Array objects and Base64 or hexadecimal strings.

  • Uint8Array fromBase64() Creates a Uint8Array object from a base64-encoded string
  • Uint8Array toBase64() Returns a base64-encoded string from the data in an int8Array
  • Uint8Array fromHex() Creates a Uint8Array object from a hexadecimal string
  • Uint8Array toHex() Returns a hex-encoded string from the data in an int8Array

Warning

The 2026 edition is not published yet. It normally ships in June. As of November 2025, this is a list of the features in the draft, that is likely to be in the ES2026.

As of November 2025, this is a list of the features in the draft, that is likely to be in the ES2026.

The using Keyword

The using keyword is an addition to JavaScript 2026. It provides a mechanism for managing resources that require explicit disposal.

It declares a block-scoped variable , similar to const , but with the difference that it guarantees synchronous disposal of the used resource when the variable goes out of scope.

Example

class MyResource {
  constructor(name) {
    this.name = name;
    myDisplay(`Resource ${this.name} acquired.`);
  }
[Symbol.dispose]() {
  myDisplay(`Resource ${this.name} disposed.`);
}
}
function manageResource() {
  using resource = new MyResource("Database Connection");
  // Use the resource here myDisplay(`Using resource: ${resource.name}`);
}

The using keyword simplifies resource management by automatically handling the cleanup process, reducing the risk of resource leaks and improving code readability compared to manual try...finally blocks for disposal.

  • Resource Management using is designed for objects that implement the Symbol.dispose method, which defines the cleanup logic for the resource.
  • Synchronous Disposal When a variable declared with using exits its scope (at the end of a block or function), its Symbol.dispose method is automatically called.
  • Asynchronous Disposal For resources requiring asynchronous cleanup, the await using declaration can be employed. This ensures that the disposal process is awaited before the variable fully goes out of scope.
  • Block-Scoped Like const , variables declared with using are local to the block in which they are declared, and must be initialized at the time of declaration.
  • Immutable Like to const , variables declared with using cannot be reassigned after initialization.

Browser Support

using is already supported in many browsers:

Chrome 134Edge 134Firefox 141Safari ❌Opera 119
Mar 2025Mar 2025Jul 2025❌May 2025

await using

Inspired by other languages, JavaScript 2026 introduces using blocks for automatic cleanup of resources like file handles, database connections, or network streams.

This is especially beneficial for asynchronous operations:

Example

async function processFile() {
  using fileHandle = await openFile('data.txt');
  // Work with fileHandle here
} // fileHandle is automatically closed here

Browser Support

await using is already supported in many browsers:

Chrome 134Edge 134Firefox 141Safari ❌Opera 119
Mar 2025Mar 2025Jul 2025❌May 2025

Error.isError()

The Error.isError() static method checks whether a value is an Error object.

Error.isError(new TypeError()); // true
Error.isError({ name: "Error" }); // false

Error.isError() is a safe alternative to instanceof Error which fails across realms.

Realm-safe error check: An Error from an iframe verifies with Error.isError() and fails with instanceof .

Browser Support

Error.isError() is already supported in many browsers:

Chrome 134Edge 134Firefox 138Safari ❌Opera 119
Mar 2025Mar 2025Apr 2025❌May 2025

Array.fromAsync()

Example

async function* asyncGenerator() {
  yield Promise.resolve(1);
  yield Promise.resolve(2);
  yield Promise.resolve(3);
}
async function processAsyncData() {
  const arr = await Array.fromAsync(asyncGenerator());
}
processAsyncData();

Browser Support

Array.fromAsync() is already supported in many browsers:

Chrome 121Edge 121Firefox 115Safari 16.4Opera ❌
Jan 2024Jan 2024Jul 2023May 2023❌

Uint8Array to/fromBase64()

Examples

let string = 'ExampleSite 123';
const arr = Uint8Array.fromBase64(string);

Browser Support

to/fromBase64() is already supported in many browsers:

Chrome 140Edge 140Firefox 133Safari 18.2Opera ❌
Sep 2025Sep 2025Nov 2024Des 2024❌

Uint8Array to/fromHex()

Examples

let text = '5b749c868a25b35db7';
const arr = Uint8Array.fromHex(text);

Browser Support

to/fromHex() is already supported in many browsers:

Chrome 140Edge 140Firefox 133Safari 18.2Opera ❌
Sep 2025Sep 2025Nov 2024Des 2024❌

Previous

Project - localStorage Counter

Next

JavaScript Silent Errors