Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2021年4月以降、すべてのブラウザーで利用可能です。
* この機能の一部は、対応レベルが異なる場合があります。
WeakRef オブジェクトは、ガベージコレクションを受けることを妨げない他のオブジェクトへの弱い参照を保持します。
WeakRef オブジェクトはオブジェクトへの弱い参照を持ち、これはターゲットまたはリファレントと呼ばれます。オブジェクトへの弱い参照は、ガベージコレクターによるオブジェクトの回収を妨げない参照です。対照的に、通常の(または強い)参照はオブジェクトをメモリーに保持します。オブジェクトが強い参照を持たなくなった場合、 JavaScript エンジンのガベージコレクターは、オブジェクトを破棄してメモリーを再取得することがあります。そうなると、弱い参照からオブジェクトを取得することはできなくなります。
未登録のシンボルもガベージコレクション可能であるため、WeakRef オブジェクトの対象として使用することもできます。ただし、使用する用途は限られます。
WeakRef の正しい使用には慎重な検討が必要であり、可能であれば避けた方が良いでしょう。また、仕様で保証されていない特定の動作に依存しないことも重要です。ガベージコレクションがいつ、どのように、そしてどのように発生するかは、使用している JavaScript エンジンの実装に依存します。あるエンジンで観察した動作が、別のエンジン、同じエンジンの別のバージョン、あるいは同じエンジンの同じバージョンでも少し違う状況では異なる可能性があります。ガベージコレクションは、 JavaScript エンジンの実装者が常に解決策を改良している難しい問題です。
ここでは、 WeakRef 導入の提案の著者が盛り込んだ具体的なポイントをいくつか紹介します。
ガベージコレクションは複雑です。アプリケーションもしくはライブラリーが WeakRef のガベージコレクションの解放処理か、即時にファイナライザー(解放処理のコールバック)の呼び出し処理に依存している場合は、予想した動作とは異なる動作を行うかもしれません。解放処理は予想よりもかなり後に行われるか、もしくは行われないからです。以下に挙げた様々な原因が考えられます。
新しい WeakRef オブジェクトを生成します。
これらのプロパティは WeakRef.prototype で定義されており、すべての WeakRef インスタンスで共有されます。
WeakRef.prototype.constructor 省略可インスタンスオブジェクトを作成したコンストラクター関数です。 WeakRef インスタンスの場合、初期値は WeakRef コンストラクターです。
メモ: このプロパティは仕様上 "normative optional" とされており、適合性のある実装では constructor プロパティを公開しないことを意味しています。これにより、任意のコードが WeakRef コンストラクターを取得し、ガベージコレクションを監視することができなくなります。しかし、主要なエンジンはすべて既定では公開しています。
@@toStringTag プロパティの初期値は文字列 "WeakRef" です。このプロパティは Object.prototype.toString() で使用されます。
WeakRef オブジェクトの対象オブジェクトを返すか、対象オブジェクトが既に回収されている場合は undefined を返します。
この例では、 DOM 要素に表示させるカウンターを開始させ、その要素が存在しなくなったときに停止させます。
| ECMAScript® 2027 Language Specification # sec-weak-ref-objects |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。