メインコンテンツまでスキップ

プライベートブランドチェック、別名`#foo in obj`

· 約3分
Marja Hölttä ([@marjakh](https://twitter.com/marjakh))

in演算子は、与えられたオブジェクト(またはそのプロトタイプチェーン内の任意のオブジェクト)が与えられたプロパティを持っているかどうかを確認するために使用できます:

const o1 = {'foo': 0};
console.log('foo' in o1); // true
const o2 = {};
console.log('foo' in o2); // false
const o3 = Object.create(o1);
console.log('foo' in o3); // true

プライベートブランドチェック機能は、このin演算子を拡張してプライベートクラスフィールドもサポートします:

class A {
  static test(obj) {
    console.log(#foo in obj);
  }
  #foo = 0;
}

A.test(new A()); // true
A.test({}); // false

class B {
 #foo = 0;
}

A.test(new B()); // false; 同じ#fooではない

プライベート名はそれを定義するクラスの内部でのみ利用可能であるため、テストは上記のstatic testのようなメソッド内など、クラス内部で行う必要があります。

サブクラスのインスタンスは、親クラスからプライベートフィールドを自身のプロパティとして受け取ります:

class SubA extends A {};
A.test(new SubA()); // true

しかし、Object.createで作成されたオブジェクトや、その後に__proto__セッターやObject.setPrototypeOfを使用してプロトタイプが設定されたオブジェクトは、プライベートフィールドを自身のプロパティとして受け取りません。プライベートフィールドの検索は自身のプロパティに対してのみ機能するため、in演算子はこれらの継承されたフィールドを見つけることができません:

クラスの静的初期化ブロック

· 約3分
Shu-yu Guo ([@_shu](https://twitter.com/_shu))

新しいクラス静的初期化ブロック構文により、クラス定義ごとに1度だけ実行するコードをまとめて1つの場所に配置することができます。以下の例では、疑似乱数生成器が静的ブロックを使用してエントロピーのプールを初期化し、class MyPRNG の定義が評価される際に1度だけ実行されることを示しています。

JavaScriptのBigIntとWebAssemblyの統合

· 約6分
Alon Zakai

JS-BigInt-Integration機能は、JavaScriptとWebAssembly間で64ビット整数を簡単に受け渡しできるようにします。この記事では、その意味と、それがなぜ便利であるかについて説明します。これには、開発者の作業を簡素化し、コードの実行速度を向上させ、さらにビルド時間を短縮することを含みます。

`Atomics.wait`, `Atomics.notify`, `Atomics.waitAsync`

· 約10分
[マリヤ・ホルタ](https://twitter.com/marjakh)、ノンブロッキングブロガー

Atomics.wait および Atomics.notify は、ミューテックスやその他の同期手段を実装するために便利な低レベルの同期プリミティブです。しかし、Atomics.wait はブロッキングであるため、メインスレッドで呼び出すことはできません(試みると TypeError が投げられます)。

`Intl.DisplayNames`

· 約5分
Shu-yu Guo ([@_shu](https://twitter.com/_shu)) と Frank Yung-Fong Tang

全世界のユーザーに届くWebアプリケーションは、多くの異なる言語で言語名、地域名、スクリプト名、通貨名を表示する必要があります。それらの名称の翻訳にはデータが必要であり、そのデータはUnicode CLDRで利用可能です。これらのデータをアプリケーションの一部としてパッケージングすることは開発者の時間を費やすことにつながります。ユーザーは言語名や地域名の翻訳において一貫性を好む傾向があり、世界の地政学的動向に合わせてそのデータを更新するには、絶え間ないメンテナンスが必要です。

高速で並列処理が可能なWebAssembly SIMD

· 約13分
ディープティ・ガンドルリ ([@dptig](https://twitter.com/dptig))、トーマス・ライブリー ([@tlively52](https://twitter.com/tlively52))、イングヴァル・ステパニャン ([@RReverser](https://twitter.com/RReverser))

SIMDは、Single Instruction, Multiple Data(単一命令、複数データ)の略称です。SIMD命令は特別な種類の命令で、アプリケーション内のデータ並列性を活用し、複数のデータ要素に同時に同じ操作を行います。音声/映像コーデックや画像処理など、計算負荷の高いアプリケーションは、SIMD命令を利用してパフォーマンスを向上させています。ほとんどの現代的なアーキテクチャは、何らかの形でSIMD命令をサポートしています。

RegExp マッチングインデックス

· 約6分
Maya Armyanova ([@Zmayski](https://twitter.com/Zmayski))、新しい機能を定期的に表現する

JavaScript は、新しい正規表現拡張機能「マッチングインデックス」を搭載されました。JavaScript コードの中で予約語と一致する無効な変数名を見つけて、その変数名の下にキャレット(^)や「下線」を表示したい場合を想像してください。例えば以下のように:

`String.prototype.replaceAll`

· 約5分
Mathias Bynens ([@mathias](https://twitter.com/mathias))

JavaScript で文字列を扱ったことがあるなら、String#replace メソッドに出会ったことがあるでしょう。String.prototype.replace(searchValue, replacement) は指定されたパラメーターに基づいて一致する部分を置換した結果の文字列を返します: