globalThis
· 約2分
もし以前にWebブラウザで使用するJavaScriptを書いたことがあるなら、グローバルthis
にアクセスするためにwindow
を使用した可能性があります。Node.jsでは、global
を使ったことがあるかもしれません。どちらの環境でも動作するコードを書く場合、利用可能なものを検出して使用してきたかもしれませんが、サポートする環境とユースケースの数が増えるごとにチェックすべき識別子のリストは増加します。それはすぐに管理ができなくなります:
// グローバル`this`を取得するための素朴な試み。これは使用しないでください!
const getGlobalThis = () => {
if (typeof globalThis !== 'undefined') return globalThis;
if (typeof self !== 'undefined') return self;
if (typeof window !== 'undefined') return window;
if (typeof global !== 'undefined') return global;
// 注意: これでも間違った結果を返す可能性があります!
if (typeof this !== 'undefined') return this;
throw new Error('グローバル`this`を見つけることができませんでした');
};
const theGlobalThis = getGlobalThis();
上記のアプローチがなぜ不十分なのか(およびさらに複雑な手法)についての詳細は、普遍的なJavaScriptにおける恐ろしいglobalThis
ポリフィルをご覧ください。
globalThis
プロポーザルは、JavaScriptの環境(ブラウザ、Node.js、またはその他)に関係なく、スクリプトの目標(従来のスクリプトまたはモジュール?)に関係なくグローバルthis
にアクセスするための統一されたメカニズムを導入します。
const theGlobalThis = globalThis;
最新のコードでは、グローバルthis
にアクセスする必要がないかもしれません。JavaScriptモジュールを使えば、グローバルな状態をいじるのではなく、機能を宣言的にimport
およびexport
できます。しかし、globalThis
はポリフィルやその他のグローバルアクセスを必要とするライブラリにとって依然として有用です。