表示されているページは、編集用 バージョンの MDN Web Docsです

MDN Web Docs のユーザーとして表示: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/globalThis

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!
}

仕様

仕様書
ECMAScript (ECMA-262)
globalThis の定義

ブラウザーの互換性

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

凡例

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

実装の進捗状況

この機能はまだブラウザー間で相互運用できる安定度に達していないため、以下の表では、この機能の日次の実装状況を示しています。このデータは JavaScript の標準テストスイートである Test262 で、各ブラウザーの JavaScript エンジンのナイトリービルドまたは最新リリースで関連する機能を実行して見ることにより生成しています。

関連情報

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

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