ヒストリア284663 views
教育148958 views
高校生物549999 views
高校倫理1433840 views
世界の国560930 views
中学理科1626729 views
MathPython492025 views
いろは2988729 views
小学社会308762 views
高校物理158371 views
Help
Tools

English

globalThis とはなにか

globalThis は JavaScript の実行環境に依存せず、グローバルオブジェクトを参照するための標準的な方法である。ES2020 で導入された。

従来、グローバルオブジェクトへのアクセス方法は環境によって異なっていた。

ブラウザwindow
Node.jsglobal
Web Workerself

この違いにより、複数の環境で動作するコードを書くには環境判定が必要だった。globalThis はこの問題を解決し、どの環境でも同じ記法でグローバルオブジェクトにアクセスできる。

// どの環境でも動作する
globalThis.myGlobal = 'Hello'
console.log(globalThis.myGlobal) // 'Hello'

ポリフィルの登録

環境を問わずポリフィルを登録する場合にも使える。

// 古い環境向けに Array.prototype.at が存在しなければ追加
if (!globalThis.Array.prototype.at) {
  globalThis.Array.prototype.at = function(index) {
    if (index < 0) {
      return this[this.length + index]
    }
    return this[index]
  }
}

環境判定

現在の実行環境を判定するコードも簡潔に書ける。

function getEnvironment() {
  if (globalThis.window !== undefined) {
    return 'browser'
  }
  if (globalThis.process !== undefined) {
    return 'node'
  }
  if (globalThis.self !== undefined) {
    return 'worker'
  }
  return 'unknown'
}

console.log(getEnvironment())

従来の書き方との比較

globalThis 導入前は、環境ごとの分岐を書く必要があった。

// 従来の方法
const getGlobal = () => {
  if (typeof window !== 'undefined') return window
  if (typeof global !== 'undefined') return global
  if (typeof self !== 'undefined') return self
  throw new Error('Unable to locate global object')
}

const g = getGlobal()
g.myValue = 42
// globalThis を使う方法
globalThis.myValue = 42

globalThis を使えば、このような冗長なコードが不要になる。ライブラリ開発やユニバーサル JavaScript を書く際に特に有用である。