ECMAScript 2022

JavaScriptバージョン番号

古いECMAScriptバージョンは数字で命名されています:ES5およびES6。

2016年から、バージョンは年で命名されています:ES2016、2018、2020、2022。

ES2022の新しい機能

警告:

これらの機能は比較的新しいです。

旧版ブラウザでは代替コード(Polyfill)が必要になる可能性があります。

JavaScript Array at()

ES2022では配列メソッドが導入されました at()

例1

fruits配列の第3要素を取得します:

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

自分で試してみてください

例2

fruits配列の第3要素を取得します:

const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fruit = fruits[2];

自分で試してみてください

at() メソッドは指定されたインデックスの要素を配列から返します。

at() メソッドは [] 返される結果は同じです。

2022年3月から、すべての現代ブラウザでサポートされています at() メソッド:

Chrome Edge Firefox Safari Opera
Chrome 92 Edge 92 Firefox 90 Safari 15.4 Opera 78
2021 年 4 月 2021年7月 2021年7月 2022年3月 2021年8月

注意:

多くの言語では負のインデックスを使用することができます(例えば [-1])オブジェクト/配列/文字列の最後の要素にアクセスする方法

これはJavaScriptでは実行不可能です、なぜなら [] 配列やオブジェクトにアクセスするために使用されます。obj[-1]は、オブジェクトの最後の属性ではなく、キー-1の値を指します。

at() このメソッドはES2022で導入され、この問題を解決するために使用されます。

JavaScript String at()

ES2022では文字列メソッドが導入されました at()

例1

name 文字列の第3文字を取得します:

const name = "W3Schools";
let letter = name.at(2);

自分で試してみてください

例2

name 文字列の第3文字を取得します:

const name = "W3Schools";
let letter = name[2];

自分で試してみてください

at() メソッドは、文字列から指定されたインデックスの文字を返します。

at() メソッドは [] 返される結果は同じです。

2022年3月から、すべての現代ブラウザでサポートされています at() メソッド:

Chrome Edge Firefox Safari Opera
Chrome 92 Edge 92 Firefox 90 Safari 15.4 Opera 78
2021 年 4 月 2021年7月 2021年7月 2022年3月 2021年8月

RegExp d 修飾子を追加しました。

ES2022は、 /d 修飾子は、マッチングの開始と終了を示すために使用されます。

インスタンス

let text = "aaaabb";
let result = text.match(/(aa)(bb)/d);

自分で試してみてください

RegExp 修飾子は、大文字と小文字を区別しない、および他のグローバル検索を指定するために使用されます:

修飾子 説明 試してみてください
g グローバルマッチング(すべてを検索)を実行します。 試してみてください
i 大文字と小文字を区別しないマッチングを実行します。 試してみてください
d サブ文字列マッチング(ES2022 新規追加)を実行します。 試してみてください
m 複数行のマッチングを実行します。 試してみてください

Object.hasOwn()

ES2022は、属性がオブジェクトの固有属性であるかどうかを安全に確認する方法を提供しています。

Object.hasOwn() 似ている Object.prototype.hasOwnPropertyですが、すべてのオブジェクトタイプをサポートしています。

インスタンス

Object.hasOwn(myObject, age)

自分で試してみてください

エラー原因

ES2022は、error.causeを通じてエラーの根本原因を指定することができます。

インスタンス

try { 
  connectData(); 
} 
  throw new Error("接続失敗", { cause: err }); 
}

自分で試してみてください

JavaScript await import

JavaScript モジュールは、実行前に必要なインポートリソースを待つことができます:

import {myData} from './myData.js';
const data = await myData();

JavaScript クラスフィールド宣言

class Hello {
  counter = 0; // クラスフィールド
}
const myClass = new Hello();
let x = myClass.counter;

2021年4月から、すべての現代ブラウザでクラスフィールドの宣言がサポートされています:

Chrome Edge Firefox Safari Opera
Chrome 72 Edge 79 Firefox 69 Safari 14.1 Opera 60
2019年1月 2020 年 1 月 2019年9月 2021 年 4 月 2020 年 1 月

JavaScript プライベートメソッドとフィールド

class Hello {
  #counter = 0;  // プライベートフィールド
  #myMethod() {} // プライベートメソッド
}
const myClass = new Hello();
let x = myClass.#counter; // エラー
myClass.#myMethod();      // エラー

2021 年 6 月から、すべての現代ブラウザでプライベートメソッドとフィールドがサポートされています:

Chrome Edge Firefox Safari Opera
Chrome 74 Edge 79 Firefox 90 Safari 14.1 Opera 62
2019 年 4 月 2020 年 1 月 2021 年 6 月 2021 年 4 月 2019 年 6 月