WeakMap
WeakMap はキーにオブジェクトのみを使用でき、キーへの参照が他に存在しない場合はガベージコレクションの対象になります。プライベートデータやメタデータの関連付けに使用します。
概要
WeakMap はキーにオブジェクトのみを使用でき、キーへの参照が他に存在しない場合はガベージコレクションの対象になります。プライベートデータやメタデータの関連付けに使用します。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 36 | 12 | 6 | 8 | 36 | 8 | |
| WeakMap() コンストラクターは、WeakMap オブジェクトを生成します。 | 36 | 12 | 6 | 8 | 36 | 8 |
WeakMap.WeakMap.iterable allowed `新しい WeakMap(反復可能)` | 38 | 12 | 36 | 9 | 38 | 9 |
WeakMap.WeakMap.null allowed `新しいWeakMap(null)` | 36 | 12 | 37 | 8 | 36 | 8 |
| delete() は WeakMap インスタンスのメソッドで、この WeakMap からキーで指定された項目を削除します。 | 36 | 12 | 6 | 8 | 36 | 8 |
| get() は WeakMap インスタンスのメソッドで、この WeakMap 内のキーに対応する値を返します。該当するキーが存在しない場合は undefined を返します。オブジェクトの値は、コピーではなく、最初に格納されたときの参照と同じものが返されます。そのため、返されたオブジェクトに変更を行うと、その参照が保持されている場所(WeakMap の中を含む)すべてに反映されます。 | 36 | 12 | 6 | 8 | 36 | 8 |
| has() は WeakMap インスタンスのメソッドで、指定されたキーをもつ要素が WeakMap オブジェクト内に存在するかどうかを示す論理値を返します。 | 36 | 12 | 6 | 8 | 36 | 8 |
| set() は WeakMap インスタンスのメソッドで、指定されたキーと値をもつ新しい項目を WeakMap オブジェクトへ追加します。すでにそのキーが存在する場合は、項目を更新します。 | 36 | 12 | 6 | 8 | 36 | 8 |
WeakMap.symbol as keys 未登録のシンボルをキーとして使用 | 109 | 109 | 146 | 16.4 | 109 | 16.4 |
- Firefox 38 より前のバージョンでは、このメソッドは key パラメータがオブジェクトでない場合に `TypeError` を投げていた。これはバージョン 38 以降で修正され、ES2015 標準に従って `false` を返すようになりました。
- Firefox 38 より前のバージョンでは、このメソッドは key パラメータがオブジェクトでない場合に `TypeError` を投げていた。しかし、ES2015 仕様では、代わりに `undefined` を返すように指定されています。さらに、`WeakMap.prototype.get` はオプションの第2引数をフォールバック値として受け入れていましたが、これは標準ではありません。どちらの非標準的な動作もバージョン38以降では削除されている。
- Firefox 38 より前のバージョンでは、このメソッドは key パラメータがオブジェクトでない場合に `TypeError` を投げていた。これはバージョン 38 以降で修正され、ES2015 標準に従って `false` を返すようになりました。
- Firefox 38 より前のバージョンでは、このメソッドは key パラメータがオブジェクトでない場合に `TypeError` を投げていた。これはバージョン 38 以降で修正され、ES2015 標準に従って `false` を返すようになりました。
基本構文
const privateData = new WeakMap();
class User {
constructor(name) {
privateData.set(this, { name });
}
getName() {
return privateData.get(this).name;
}
} ライブデモ
Check whether an object is processed
efficiency to manage.. with object that processed or or WeakMap.
実務での使いどころ
-
WeakMap の活用
キーがオブジェクトのみで、ガベージコレクションを妨げない Map。プライベートデータの格納に使用。
注意点
- 特になし。すべての主要ブラウザで安定して動作する。
アクセシビリティ
- JavaScript による動的更新時は、aria-live リージョンで変更をスクリーンリーダーに通知する。
参考リンク
Powered by web-features