globalThis はグローバルプロパティで、グローバルオブジェクトと同等であるグローバルな this が格納されています。

構文

globalThis

解説

従来、グローバルスコープにアクセスするには、 JavaScript 環境ごとに異なる構文を必要としていました。ウェブ上では window, self, frames を使うことができます。しかし Web Workerself のみを利用することができます。 Node.js はこれらのいずれも利用できず、代わりに global を使用する必要があります。
this キーワードは、 strict でないモードで実行されている関数の中で使用することもできますが、 strict モードで実行されているモジュールや関数の中では undefined になります。 Function('return this')() を使用することもできますが、 CSP などによって eval() を無効にしている環境では、この方法でも Function の使用が抑制されます。

globalThis プロパティは、環境を越えてグローバルな this 値 (すなわちグローバルオブジェクト自身) にアクセスするための標準的な方法を提供します。 windowself などの同様のプロパティとは異なり、これはウィンドウのコンテキストでも非ウィンドウのコンテキストでも動作することが保証されています。この方法では、コードがどの環境で実行されているのかを知らなくても、一貫した方法でグローバルオブジェクトにアクセスすることができます。名前を覚えやすくするために、グローバルスコープでは this の値は globalThis であることを忘れないでください。

HTML と WindowProxy

多くのエンジンでは globalThis は実在のグローバルオブジェクトの参照になりますが、ウェブブラウザーにおいては、 iframe およびウィンドウ間のセキュリティ上の配慮から、これは (直接アクセスできない) 実在のグローバルオブジェクトに関する Proxy になります。一般的な利用に関わることは稀ですが、認識しておくことは重要です。

命名

selfglobal のような他の一般的な名前の選択肢は、既存のコードとの互換性を損なう可能性があるため、候補から除外されました。詳しくは language proposal's "naming" document を参照してください。

globalThis 以前は、その環境のグローバルオブジェクトを取得する信頼性の高い方法は Function('return this')() だけでした。ただし、これは設定によっては CSP 違反が発生するため、 es6-shim では次のようなチェックを使用します。

var getGlobal = function () { 
  if (typeof self !== 'undefined') { return self; } 
  if (typeof window !== 'undefined') { return window; } 
  if (typeof global !== 'undefined') { return global; } 
  throw new Error('unable to locate global object'); 
}; 

var globals = getGlobal(); 

if (typeof globals.setTimeout !== 'function') { 
  // no setTimeout in this environment! 
}

globalThis が利用可能になったため、異なる環境間でグローバルを追加で検索する必要がなくなりました。

if (typeof globalThis.setTimeout !== 'function') {
  // no setTimeout in this environment!
}

仕様書

仕様書 状態 備考
globalThis proposal Stage 3

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
globalThisChrome 完全対応 71Edge 未対応 なしFirefox 完全対応 65IE 未対応 なしOpera 未対応 なしSafari 完全対応 12.1WebView Android 完全対応 71Chrome Android 完全対応 71Firefox Android 完全対応 65Opera Android 未対応 なしSafari iOS 完全対応 12.2Samsung Internet Android 未対応 なしnodejs 完全対応 12.0.0

凡例

完全対応  
完全対応
未対応  
未対応

ドキュメントのタグと貢献者

このページの貢献者: mfuji09, shisama
最終更新者: mfuji09,