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

globalThis

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

もし以前に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はポリフィルやその他のグローバルアクセスを必要とするライブラリにとって依然として有用です。

globalThisのサポート