Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS DSA TYPESCRIPT ANGULAR ANGULARJS GIT POSTGRESQL MONGODB ASP AI R GO KOTLIN SWIFT SASS VUE GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE INTRO TO PROGRAMMING INTRO TO HTML & CSS BASH RUST TOOLS

Basic JavaScript

JS Tutorial JS Introduction JS Where To JS Output

JS Syntax

JS Syntax JS Statements JS Comments JS Variables JS Let JS Const JS Types

JS Operators

JS Operators JS Arithmetic JS Assignment JS Comparisons JS Conditional JS If JS If Else JS Ternary JS Switch JS Booleans JS Logical

JS Loops

JS Loops JS Loop for JS Loop while JS Break JS Continue JS Control Flow

JS Strings

JS Strings JS String Templates JS String Methods JS String Search JS String Reference

JS Numbers

JS Numbers JS Number Methods JS Number Properties JS Number Reference JS Bitwise JS BigInt

JS Functions

Function Path Function Intro Function Invocation Function Parameters Function Returns Function Arguments Function Expressions Function Arrow Function Quiz

JS Objects

Object Path Object Intro Object Properties Object Methods Object this Object Display Object Constructors

JS Scope

JS Scope JS Code Blocks JS Hoisting JS Strict Mode

JS Dates

JS Dates JS Date Formats JS Date Get JS Date Set JS Date Methods

JS Arrays

JS Arrays JS Array Methods JS Array Search JS Array Sort JS Array Iterations JS Array Reference JS Array Const

JS Sets

JS Sets JS Set Methods JS Set Logic JS Set WeakSet JS Set Reference

JS Maps

JS Maps JS Map Methods JS Map WeakMap JS Map Reference

JS Iterations

JS Loops JS Iterables JS Iterators JS Generators

JS Math

JS Math JS Math Reference JS Math Random

JS RexExp

JS RegExp JS RegExp Flags JS RegExp Classes JS RegExp Metachars JS RegExp Assertions JS RegExp Quantifiers JS RegExp Patterns JS RegExp Objects JS RegExp Methods

JS Data Types

JS Destructuring JS Data Types JS Primitive Data JS Object Types JS typeof JS toString JS Type Conversion

JS Errors

JS Errors Intro JS Errors Silent JS Error Statements JS Error Object

JS Debugging

Debugging Intro Debugging Console Debugging Breakpoints Debugging Errors Debugging Async Debugging Reference

JS Conventions

JS Style Guide JS Best Practices JS Mistakes JS Performance

JS References

JS Statements JS Reserved Keywords JS Operators JS Precedence

JS Versions

JS 2026 JS 2025 JS 2024 JS 2023 JS 2022 JS 2021 JS 2020 JS 2019 JS 2018 JS 2017 JS 2016 JS Versions JS 2015 (ES6) JS 2009 (ES5) JS 1999 (ES3) JS IE / Edge JS History

JS HTML

JS HTML DOM JS Events JS Projects New

JS Advanced

JS Temporal  New JS Functions JS Objects JS Classes JS Asynchronous JS Modules JS Meta & Proxy JS Typed Arrays JS DOM Navigation JS Windows JS Web APIs JS AJAX JS JSON JS jQuery JS Graphics JS Examples JS Reference


ECMAScript 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.



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.


Explicit Resource Management

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}`);
}
Try it Yourself »

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
134
Edge
134
Firefox
141
Safari
Opera
119
Mar 2025 Mar 2025 Jul 2025 May 2025

Explicit Resource Management

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
Try it Yourself »

Browser Support

await using is already supported in many browsers:

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

Error.isError()

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

Example

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

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
134
Edge
134
Firefox
138
Safari
Opera
119
Mar 2025 Mar 2025 Apr 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();
Try it Yourself »

Browser Support

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

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

Uint8Array to/fromBase64()

Examples

let string = 'W3Schools 123';

const arr = Uint8Array.fromBase64(string);
Try it Yourself »
const arr = new Uint8Array([91,116,156,134,138,37,179,93,183]);

let text = arr.toBase64();
Try it Yourself »

Browser Support

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

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

Uint8Array to/fromHex()

Examples

let text = '5b749c868a25b35db7';

const arr = Uint8Array.fromHex(text);
Try it Yourself »
const arr = new Uint8Array([91,116,156,134,138,37,179,93,183]);

let text = arr.toHex();
Try it Yourself »

Browser Support

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

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


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
sales@w3schools.com

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
help@w3schools.com

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookies and privacy policy.

Copyright 1999-2026 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.

-->