2026年のJavaScriptでは、Map、WeakMap、JSON、Iterator、Uint8Array、Math、Error、Arrayに新しい機能が追加されています。
主な変更点は、値がなければ初期値を入れるMapの機能、JSON.parseで元のJSON文字列を扱う機能、Iteratorをつなげる機能、バイナリデータをBase64やHexに変換する機能、数値の合計を扱う機能などです。
この記事では、ES2026に入る予定の機能を中心に、2026年現在あわせて見ておきたい近年の追加機能もまとめます。
- ES2026で追加される主な機能
- Map.prototype.getOrInsert
- Map.prototype.getOrInsertComputed
- WeakMap.prototype.getOrInsert
- WeakMap.prototype.getOrInsertComputed
- JSON.parse source text access
- Iterator.concat
- Uint8ArrayのBase64変換
- Uint8ArrayのHex変換
- Uint8ArrayのsetFromBase64とsetFromHex
- Math.sumPrecise
- Error.isError
- Array.fromAsync
- 2026年現在あわせて掲載したい近年の追加機能
- RegExp.escape
- Promise.try
- Setの集合操作メソッド
- 2026年版 JavaScript変更点まとめ
ES2026で追加される主な機能
ES2026で追加される主な機能は、次の通りです。
| 機能 | 内容 |
|---|---|
Map.prototype.getOrInsert | キーがなければ初期値を入れて取得する |
Map.prototype.getOrInsertComputed | キーがなければ関数で初期値を作って取得する |
WeakMap.prototype.getOrInsert | WeakMapで初期値を入れながら値を取得する |
WeakMap.prototype.getOrInsertComputed | WeakMapで関数から初期値を作って取得する |
JSON.parse source text access | JSON.parse時に元のJSON文字列を扱える |
Iterator.concat | 複数のIteratorをつなげる |
Uint8ArrayのBase64変換 | バイナリデータとBase64文字列を変換する |
Uint8ArrayのHex変換 | バイナリデータと16進数文字列を変換する |
Math.sumPrecise | 数値の合計をより正確に計算する |
Error.isError | 値がErrorかどうかを判定する |
Array.fromAsync | 非同期で取得する値を配列に変換する |
Map.prototype.getOrInsert
Map.prototype.getOrInsertは、Mapに指定したキーが存在する場合はその値を取得し、存在しない場合は初期値を入れてから取得する機能です。
これまで、Mapで件数を数えるような処理では、キーがあるかどうかを先に確認する必要がありました。
const counts = new Map();
const key = "JavaScript";
if (!counts.has(key)) {
counts.set(key, 0);
}
const currentCount = counts.get(key);
counts.set(key, currentCount + 1);
console.log(counts.get(key));
getOrInsertを使うと、初期値を入れる部分を短く書けます。
const counts = new Map();
const key = "JavaScript";
const currentCount = counts.getOrInsert(key, 0);
counts.set(key, currentCount + 1);
console.log(counts.get(key));
キーがすでにある場合は、その値を返します。
キーがない場合は、指定した初期値をMapに入れてから返します。
Map.prototype.getOrInsertComputed
Map.prototype.getOrInsertComputedは、キーが存在しない場合に、関数で初期値を作ってからMapに入れる機能です。
初期値がオブジェクトの場合や、作成時に処理が必要な場合に使いやすい書き方です。
const users = new Map();
const user = users.getOrInsertComputed("user-1", function () {
return {
name: "山田太郎",
role: "member"
};
});
console.log(user);
キーがない場合だけ、関数が実行されます。
すでに値が入っている場合は、保存済みの値を返します。
WeakMap.prototype.getOrInsert
WeakMapにも、getOrInsertが追加されています。
WeakMapは、オブジェクトをキーにして値を保存するための仕組みです。
const cache = new WeakMap();
const element = {};
const data = cache.getOrInsert(element, {
clicked: 0
});
console.log(data);
上の例では、elementをキーとして、初期値のオブジェクトを保存しています。
すでにelementに対応する値があれば、その値を返します。
なければ、指定した初期値を入れて返します。
WeakMap.prototype.getOrInsertComputed
WeakMap.prototype.getOrInsertComputedは、WeakMapで初期値を関数から作る機能です。
const metadata = new WeakMap();
const button = {};
const data = metadata.getOrInsertComputed(button, function () {
return {
count: 0,
type: "button"
};
});
console.log(data);
オブジェクトに対するメタ情報やキャッシュを扱う場合に使われます。
Map版と同じく、値がない場合だけ関数が実行されます。
JSON.parse source text access
JSON.parse source text accessは、JSON.parseで変換するときに、元のJSON文字列へアクセスできる機能です。
通常のJSON.parseは、JSON文字列をJavaScriptの値に変換します。
const json = '{"name":"山田太郎","age":25}';
const user = JSON.parse(json);
console.log(user.name);
source text accessでは、reviver関数の第3引数から、元のJSON上の表現を参照できます。
const json = '{"id":12345678901234567890}';
const data = JSON.parse(json, function (key, value, context) {
if (key === "id") {
return context.source;
}
return value;
});
console.log(data.id);
JavaScriptの数値として変換する前の文字列を扱いたい場合に使えます。
巨大な数値、精度を保ちたいID、元のJSON表現を利用したい処理などで関係する変更です。
Iterator.concat
Iterator.concatは、複数のIteratorをつなげる機能です。
配列にはconcatがありますが、Iterator.concatはIteratorのまま複数の値の流れをつなげられます。
const frontend = ["HTML", "CSS"].values();
const backend = ["PHP", "SQL"].values();
const skills = Iterator.concat(frontend, backend);
for (const skill of skills) {
console.log(skill);
}
上のコードでは、frontendとbackendのIteratorをつなげて、順番に値を取り出しています。
配列に変換せずに、Iteratorの状態で処理できる点が特徴です。
Uint8ArrayのBase64変換
Uint8Arrayは、バイナリデータを扱うための型です。
ES2026では、Uint8ArrayとBase64文字列を変換する機能が追加されています。
toBase64を使うと、Uint8ArrayをBase64文字列に変換できます。
const data = new Uint8Array([72, 101, 108, 108, 111]);
const base64 = data.toBase64();
console.log(base64);
fromBase64を使うと、Base64文字列からUint8Arrayを作れます。
const data = Uint8Array.fromBase64("SGVsbG8=");
console.log(data);
Base64は、画像やファイルなどのバイナリデータを文字列として扱うときに使われます。
Uint8ArrayのHex変換
ES2026では、Uint8ArrayとHex文字列の変換も追加されています。
Hexは、バイナリデータを16進数の文字列で表す形式です。
toHexを使うと、Uint8ArrayをHex文字列に変換できます。
const data = new Uint8Array([72, 101, 108, 108, 111]);
const hex = data.toHex();
console.log(hex);
fromHexを使うと、Hex文字列からUint8Arrayを作れます。
const data = Uint8Array.fromHex("48656c6c6f");
console.log(data);
Hex変換は、ハッシュ値、暗号処理、バイナリデータの確認などで使われます。
Uint8ArrayのsetFromBase64とsetFromHex
Base64やHexの変換では、setFromBase64やsetFromHexも追加されています。
これらは、既存のUint8Arrayに対して、Base64やHexから読み込んだ値を書き込む機能です。
const data = new Uint8Array(5);
data.setFromBase64("SGVsbG8=");
console.log(data);
const data = new Uint8Array(5);
data.setFromHex("48656c6c6f");
console.log(data);
fromBase64やfromHexは新しくUint8Arrayを作ります。
setFromBase64やsetFromHexは、すでにあるUint8Arrayへ書き込みます。
Math.sumPrecise
Math.sumPreciseは、数値の合計をより正確に計算するための機能です。
JavaScriptでは、小数や非常に大きな数を含む計算で、単純に足し算した結果が期待と変わることがあります。
const values = [1e20, 0.1, -1e20];
const normalSum = values.reduce(function (total, value) {
return total + value;
}, 0);
const preciseSum = Math.sumPrecise(values);
console.log(normalSum);
console.log(preciseSum);
Math.sumPreciseは、反復可能な数値を受け取り、合計値を返します。
数値の集計、統計処理、グラフ用データの計算などで関係する変更です。
Error.isError
Error.isErrorは、値がErrorオブジェクトかどうかを判定する機能です。
const error = new Error("エラーが発生しました");
console.log(Error.isError(error));
try...catchでは、throwされる値が必ずErrorとは限りません。
try {
throw "文字列のエラー";
} catch (error) {
console.log(Error.isError(error));
}
Error.isErrorを使うと、受け取った値がErrorかどうかを判定できます。
instanceof Errorでは判定しにくいケースでも、Error.isErrorで扱いやすくなります。
Array.fromAsync
Array.fromAsyncは、非同期で取得する値を配列に変換する機能です。
Array.fromは、配列のようなデータや反復可能なデータから配列を作ります。
const text = "ABC";
const letters = Array.from(text);
console.log(letters);
Array.fromAsyncは、非同期反復可能オブジェクトなどから配列を作ります。
async function* createItems() {
yield "HTML";
yield "CSS";
yield "JavaScript";
}
async function main() {
const items = await Array.fromAsync(createItems());
console.log(items);
}
main();
Array.fromAsyncは、戻り値としてPromiseを返します。
そのため、awaitを使って結果の配列を受け取ります。
TC39の finished proposals では2026年扱いですが、MDNではBaseline 2024として掲載されています。
2026年現在あわせて掲載したい近年の追加機能
ES2026そのものではありませんが、2026年現在の記事として一緒にまとめやすい機能もあります。
| 機能 | 年 | 内容 |
|---|---|---|
RegExp.escape | 2025年 | 正規表現で使う文字列をエスケープする |
Promise.try | 2025年 | 同期処理と非同期処理をPromiseとして扱う |
Setの集合操作メソッド | 2025年 | Set同士の集合操作を行う |
RegExp.escape
RegExp.escapeは、文字列を正規表現で使いやすい形にエスケープする機能です。
正規表現では、.、*、?、[、]などに特別な意味があります。
そのため、文字列をそのままRegExpに入れると、意図しないパターンとして扱われることがあります。
const keyword = "HTML/CSS?";
const escapedKeyword = RegExp.escape(keyword);
const pattern = new RegExp(escapedKeyword);
console.log(pattern.test("HTML/CSS?を学ぶ"));
RegExp.escapeを使うと、正規表現の特殊文字を文字として扱える形に変換できます。
Promise.try
Promise.tryは、同期処理と非同期処理をPromiseとして扱う機能です。
通常の値を返す関数でも、Promiseを返す関数でも、同じようにthenやcatchにつなげられます。
function getNumber() {
return 10;
}
Promise.try(function () {
return getNumber();
})
.then(function (result) {
console.log(result);
})
.catch(function (error) {
console.error(error);
});
関数の中でエラーが発生した場合も、catchで受け取れます。
Promise.try(function () {
throw new Error("エラーが発生しました");
})
.then(function (result) {
console.log(result);
})
.catch(function (error) {
console.error(error.message);
});
Setの集合操作メソッド
Setは、重複しない値を管理するためのオブジェクトです。
新しいSetメソッドでは、Set同士の集合操作を書きやすくなっています。
const frontend = new Set(["HTML", "CSS", "JavaScript"]);
const backend = new Set(["PHP", "SQL", "JavaScript"]);
const allSkills = frontend.union(backend);
const commonSkills = frontend.intersection(backend);
const onlyFrontend = frontend.difference(backend);
console.log(allSkills);
console.log(commonSkills);
console.log(onlyFrontend);
主なSetメソッドは次の通りです。
| メソッド | 内容 |
|---|---|
union | 2つのSetをまとめる |
intersection | 共通する値を取り出す |
difference | 片方にだけある値を取り出す |
symmetricDifference | どちらか一方にだけある値を取り出す |
isSubsetOf | 一方のSetがもう一方に含まれるか確認する |
isSupersetOf | 一方のSetがもう一方を含むか確認する |
isDisjointFrom | 共通する値がないか確認する |
2026年版 JavaScript変更点まとめ
ES2026の主な変更点は、次の通りです。
Map.prototype.getOrInsertで、キーがない場合に初期値を入れて取得できるMap.prototype.getOrInsertComputedで、関数から初期値を作って取得できるWeakMapにもgetOrInsert系の機能が追加されるJSON.parse source text accessで、元のJSON文字列を扱えるIterator.concatで、複数のIteratorをつなげられるUint8Arrayで、Base64やHexとの変換ができるMath.sumPreciseで、数値の合計をより正確に計算できるError.isErrorで、値がErrorかどうかを判定できるArray.fromAsyncで、非同期で取得する値を配列に変換できる
2026年現在の記事としては、2025年のRegExp.escape、Promise.try、Setの集合操作メソッドもあわせて掲載すると、最近のJavaScriptの変更をまとめやすくなります。
2026年のJavaScriptは、MapやWeakMapの初期値処理、Iteratorの連結、JSONの元文字列参照、バイナリデータ変換、数値合計、エラー判定など、標準機能として扱える範囲が広がっています。

