2026年版 JavaScriptの変更点まとめ

JavaScript

2026年のJavaScriptでは、Map、WeakMap、JSON、Iterator、Uint8Array、Math、Error、Arrayに新しい機能が追加されています。

主な変更点は、値がなければ初期値を入れるMapの機能、JSON.parseで元のJSON文字列を扱う機能、Iteratorをつなげる機能、バイナリデータをBase64やHexに変換する機能、数値の合計を扱う機能などです。

この記事では、ES2026に入る予定の機能を中心に、2026年現在あわせて見ておきたい近年の追加機能もまとめます。

ES2026で追加される主な機能

ES2026で追加される主な機能は、次の通りです。

機能内容
Map.prototype.getOrInsertキーがなければ初期値を入れて取得する
Map.prototype.getOrInsertComputedキーがなければ関数で初期値を作って取得する
WeakMap.prototype.getOrInsertWeakMapで初期値を入れながら値を取得する
WeakMap.prototype.getOrInsertComputedWeakMapで関数から初期値を作って取得する
JSON.parse source text accessJSON.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);
}

上のコードでは、frontendbackendの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の変換では、setFromBase64setFromHexも追加されています。

これらは、既存の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);

fromBase64fromHexは新しくUint8Arrayを作ります。

setFromBase64setFromHexは、すでにある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.escape2025年正規表現で使う文字列をエスケープする
Promise.try2025年同期処理と非同期処理を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を返す関数でも、同じようにthencatchにつなげられます。

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メソッドは次の通りです。

メソッド内容
union2つの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.escapePromise.trySetの集合操作メソッドもあわせて掲載すると、最近のJavaScriptの変更をまとめやすくなります。

2026年のJavaScriptは、MapやWeakMapの初期値処理、Iteratorの連結、JSONの元文字列参照、バイナリデータ変換、数値合計、エラー判定など、標準機能として扱える範囲が広がっています。

タイトルとURLをコピーしました