この翻訳は不完全です。英語から この記事を翻訳 してください。

グローバルなglobalThisプロパティはトップレベルのグローバルオブジェクトを返します。

構文

globalThis

説明

歴史的に、グローバルスコープにアクセスすることは、異なるJavaScript環境において異なる構文を必要としました。 ウェブ上では、windowselfframes を使うことができます。しかしWeb Workersself のみ動作します.Node.jsではこれらの作業は行われず、代わりに globalを使用する必要があります。
this キーワードは、ずさんなモードで実行されている関数の中で使用することができますが、this はモジュールでは定義されず、厳密モードで実行されている関数の中では undefined になります。

globalThis プロパティは、環境を越えてグローバルオブジェクトにアクセスするための標準的な方法を提供します。window や selfなどの類似のプロパティとは異なり、ウィンドウおよびウィンドウ以外のコンテキストで動作することが保証されています。このようにして、コードがどの環境で実行されているのかを知らなくても、一貫した方法でグローバルオブジェクトにアクセスできます。

名前を覚えやすくするために、グローバルスコープでは this の値はglobalThisであることを忘れないでください。

命名

self や global など、他の一般的な名前の選択は、既存のコードとの互換性を損なう可能性があるため、考慮から除外されました。

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

凡例

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

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

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