JavaScriptでグローバルオブジェクトを取得する際、環境によって異なる参照方法が必要でした。ブラウザでは`window`、Node.jsでは`global`を使用するなど、実行環境に応じて書き分ける必要がありました。
この問題を解決するために、ES2020で`globalThis`が導入されました。`globalThis`を使用することで、実行環境に関係なく統一的にグローバルオブジェクトを参照できます。
globalThisの基本的な使い方
// どの環境でも動作する
console.log(globalThis);
// グローバル変数の定義
globalThis.myGlobalVariable = "Hello World";
// グローバル変数へのアクセス
console.log(globalThis.myGlobalVariable); // "Hello World"実行環境ごとの動作
ブラウザ環境:
console.log(globalThis === window); // trueNode.js環境:
console.log(globalThis === global); // trueWeb Workers環境:
console.log(globalThis === self); // trueglobalThisの利点
1. クロスプラットフォーム対応
- 異なる実行環境で同じコードが動作
- 環境チェックのコードが不要
2. コードの保守性向上
- 環境依存のコードを書く必要がない
- 統一的な記述で可読性が向上
3. モジュール間の互換性
- 様々な環境で動作するライブラリの開発が容易
従来の方法との比較
以前は以下のような冗長なコードが必要でした:
const getGlobalObject = () => {
if (typeof window !== 'undefined') return window;
if (typeof global !== 'undefined') return global;
if (typeof self !== 'undefined') return self;
throw new Error('グローバルオブジェクトが見つかりません');
};`globalThis`を使用すれば、このような判定は不要になります:
const global = globalThis;ブラウザサポート状況
主要なモダンブラウザは`globalThis`をサポートしています:
- Chrome 71以降
- Firefox 65以降
- Safari 12.1以降
- Edge 79以降
古いブラウザをサポートする必要がある場合は、ポリフィルの使用を検討してください。
実践的な使用例
1. 環境に依存しないタイマー処理:
globalThis.setTimeout(() => {
console.log('3秒経過');
}, 3000);2. グローバルイベントリスナー:
globalThis.addEventListener('error', (event) => {
console.error('エラーが発生しました:', event.error);
});まとめ
`globalThis`は、JavaScriptのグローバルオブジェクトを統一的に扱うための強力な機能です。環境依存のコードを削減し、より保守性の高いコードを書くことができます。モダンな開発では積極的に活用することをお勧めします。