グローバルオブジェクト
最上位階層にあるオブジェクト
"Object" と書いた時には、実はグローバルオブジェクトの Object プロパティが呼び出されている。
グローバルオブジェクトは実行環境によりアクセス方法が異なってしまっている。
グローバルオブジェクトを確実に取得する方法
globalThis (ES2020 から)
以下は安全ではないとのこと。CSP違反(Contents Security Policy, コンテンツセキュリティポリシー)になる。
var global = Function("return this")();
グローバルオブジェクトを取得する方法
Web ブラウザ
window がグローバルオブジェクトを指している。
window.self がグローバルオブジェクトを指している。
WebWorker の場合 self がグローバルオブジェクトを指している。
Node.js
global がグローバルオブジェクトを指している。(古い版だと GLOBAL)
グローバルスコープでの this
strict モードでは undefined になってしまう。
どうして global ではなくて globalThis という名前になったのか?
元々は global という名前にしようとしていたが、global の定義があった場合、Node.js 上で動作していると判定しているソースがあった。
後方互換性のため global ではなく、globalThis となった。
グローバルオブジェクトをもらうと何がうれしい?
確実にグローバルなプロパティを指定することができる。
globalThis を指定しないと、そこから見えるスコープの名前が混在してしまう。
調査
例えば、typeof globalThis.URL とやれば URL API の存在が確認できる。
グローバルオブジェクトへの操作は基本的にはダメ。
参考