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

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 2022


New Features in JavaScript 2022

Supported in all modern browsers since March 2023.

FeatureDescription
Array at() Returns an indexed element from an array
String at() Returns an indexed element from an string
RegExp /d Perform substring matches
Object.hasOwn() Check if a property is the own property of an object
error.cause Lets you specify the reason behind an error
await import Lets JavasSript modules wait for resources that require import before running.
Class field declarations Allows for properties to be defined directly within a class
Private methods and fields Allows for private properties (#method and #field)

Browser Support

ECMAScript 2022 is supported in all modern browsers since March 2023:

Chrome
94
Edge
94
Firefox
93
Safari
16.4
Opera
80
Sep 2021 Sep 2021 Oct 2021 Mar 2023 Oct 2021

JavaScript Array at()

ES2022 intoduced the array method at():

Examples

Get the third element of fruits:

const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fruit = fruits.at(2);
Try it Yourself »

Get the third element of fruits:

const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fruit = fruits[2];
Try it Yourself »

The at() method returns an indexed element from an array.

The at() method returns the same as [].

The at() method is supported in all modern browsers since March 2022:

Note

Many languages allows negative bracket indexing like [-1] to access elements from the end of an object / array / string.

This is not possible in JavaScript, because [] is used for accessing both arrays and objects. obj[-1] refers to the value of key -1, not to the last property of the object.

The at() method was introduced in ES2022 to solve this problem.


JavaScript String at()

ES2022 intoduced the string method at():

Examples

Get the third letter of name:

const name = "W3Schools";
let letter = name.at(2);
Try it Yourself »

Get the third letter of name:

const name = "W3Schools";
let letter = name[2];
Try it Yourself »

The at() method returns an indexed element from an string.

The at() method returns the same as [].


RegExp d Modifier

ES2022 added the /d modifier to express the start and end of the match.

Example

let text = "aaaabb";
let result = text.match(/(aa)(bb)/d);
Try it Yourself »

RegExp Modifiers are used to spescfy case-insensitive, and other global searches:

Modifier Description Try it
i Perform case-insensitive matching Try it »
g Perform a global match (find all) Try it »
m Perform multiline matching Try it »
d Perform substring matches (New in ES2022) Try it »

Object hasOwn

ES2022 provides a safe way to check if a property is the own property of an object.

Object.hasOwn() is similar to Object.hasOwnProperty() but supports all object types.

Example

Object.hasOwn(myObject, age)
Try it Yourself »

Error Cause

Starting from ECMAScript 2022, the Error constructor (and its subclasses like TypeError, SyntaxError, etc.) supports an optional {cause} property.

This allows you to create chained errors - where one error includes another as its cause.

Example (before)

try {
  // Create a JSON parse failure
  JSON.parse("blablablabla");
} catch(err) {
  let text = err.name + " " + err.message;
}
Try it Yourself »

Example (now)

try {
  try {
    // Create a JSON parse failure
    JSON.parse("blablablabla");
  } catch(err) {
    // Create a new error and include the original one as the cause
    throw new Error("Failed to load JSON", {cause:err});
  }
} catch(err){
  let text = err.name + " " + err.message;
  document.getElementById("demo").innerHTML = text;
}
Try it Yourself »


JavaScript await import

JavasSript modules can now wait for resources that require import before running:

import {myData} from './myData.js';

const data = await myData();

JavaScript Class Field Declarations

class Hello {
  counter = 0; // Class field
}
const myClass = new Hello();

let x = myClass.counter;

JavaScript Private Methods and Fields

class Hello {
  #counter = 0;  // Private field
  #myMethod() {} // Private method
}
const myClass = new Hello();

let x = myClass.#counter; // Error
myClass.#myMethod();      // Error

×

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.

-->