globalThis

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

We’d love to hear your thoughts on the next set of proposals for the JavaScript language. You can find a description of the proposals here.
Please take two minutes to fill out our short survey.

Die globalThis-globale Eigenschaft enthält den globalen this-Wert, der normalerweise dem globalen Objekt ähnlich ist.

Probieren Sie es aus

function canMakeHTTPRequest() {
  return typeof globalThis.XMLHttpRequest === "function";
}

console.log(canMakeHTTPRequest());
// Expected output (in a browser): true

Wert

Das globale this-Objekt.

Eigenschaften von globalThis
Schreibbarja
Aufzählbarnein
Konfigurierbarja

Hinweis: Die globalThis-Eigenschaft ist konfigurierbar und beschreibbar, sodass Codeentwickler sie verstecken können, wenn sie unsicheren Code ausführen, um zu verhindern, dass das globale Objekt offengelegt wird.

Beschreibung

Historisch gesehen erforderte der Zugriff auf das globale Objekt unterschiedliche Syntax in verschiedenen JavaScript-Umgebungen. Im Web können Sie window, self oder frames verwenden – aber in Web Workern funktioniert nur self. In Node.js funktioniert keiner dieser Ansätze, sodass Sie stattdessen global verwenden müssen. Das this-Schlüsselwort konnte innerhalb von Funktionen verwendet werden, die im Nicht-Strikt-Modus ausgeführt werden, aber this wird in Modulen und innerhalb von Funktionen im Striktmodus undefined sein. Sie können auch Function('return this')() verwenden, aber Umgebungen, die eval(), wie CSP in Browsern, deaktiviert haben, verhindern die Verwendung von Function auf diese Weise.

Die globalThis-Eigenschaft bietet eine standardisierte Möglichkeit, den globalen this-Wert (und damit das globale Objekt selbst) plattformübergreifend zuzugreifen. Anders als ähnliche Eigenschaften wie window und self garantiert sie das Funktionieren in Fenster- und Nicht-Fenster-Kontexten. Auf diese Weise können Sie ohne Kenntnis der Ausführungsumgebung konsistent auf das globale Objekt zugreifen. Um sich den Namen zu merken, denken Sie einfach daran, dass im globalen Bereich der this-Wert globalThis ist.

Hinweis: globalThis ist im Allgemeinen das gleiche Konzept wie das globale Objekt (d.h. das Hinzufügen von Eigenschaften zu globalThis macht sie zu globalen Variablen) — dies ist der Fall in Browsern und Node — aber Hosts dürfen einen anderen Wert für globalThis bereitstellen, der nicht mit dem globalen Objekt in Zusammenhang steht.

HTML und das WindowProxy

In vielen Engines wird globalThis eine Referenz auf das eigentliche globale Objekt sein, aber in Webbrowsern, aufgrund von iframe- und Sicherheitsbedenken bei Mehrfenstern, verweist es auf einen Proxy um das eigentliche globale Objekt (auf das Sie nicht direkt zugreifen können). Dieser Unterschied ist bei üblicher Verwendung selten relevant, aber wichtig zu beachten.

Benennung

Einige andere beliebte Namensvorschläge wie self und global wurden ausgeschlossen, da sie die Kompatibilität mit bestehendem Code gefährden könnten. Weitere Details finden Sie im Namensdokument des Sprachvorschlags.

globalThis ist buchstäblich der globale this-Wert. Es ist der gleiche Wert wie der this-Wert in einer nicht-strikten Funktion, die ohne ein Objekt aufgerufen wird. Es ist auch der this-Wert im globalen Bereich eines Skripts.

Beispiele

Suche nach dem Globalen über Umgebungen hinweg

Normalerweise muss das globale Objekt nicht explizit angegeben werden — seine Eigenschaften sind automatisch als globale Variablen zugänglich.

js
console.log(window.Math === Math); // true

Ein Fall, in dem expliziter Zugriff auf das globale Objekt erforderlich ist, ist beim Schreiben darauf, normalerweise für Polyfills.

Vor globalThis war der einzige zuverlässige plattformübergreifende Weg, das globale Objekt für eine Umgebung zu erhalten, Function('return this')(). Dies führt jedoch in einigen Situationen zu CSP-Verletzungen, daher würden Entwickler eine stückweise Definition wie diese verwenden (leicht angepasst aus dem ursprünglichen core-js-Quellcode):

js
function check(it) {
  // Math is known to exist as a global in every environment.
  return it && it.Math === Math && it;
}

const globalObject =
  check(typeof window === "object" && window) ||
  check(typeof self === "object" && self) ||
  check(typeof global === "object" && global) ||
  // This returns undefined when running in strict mode
  (function () {
    return this;
  })() ||
  Function("return this")();

Nachdem das globale Objekt erhalten wurde, können wir neue globale Variablen darauf definieren. Zum Beispiel das Hinzufügen einer Implementierung für Intl:

js
if (typeof globalObject.Intl === "undefined") {
  // No Intl in this environment; define our own on the global scope
  Object.defineProperty(globalObject, "Intl", {
    value: {
      // Our Intl implementation
    },
    enumerable: false,
    configurable: true,
    writable: true,
  });
}

Mit verfügbarer globalThis-Eigenschaft ist die zusätzliche Suche nach dem Globalen über Umgebungen hinweg nicht mehr erforderlich:

js
if (typeof globalThis.Intl === "undefined") {
  Object.defineProperty(globalThis, "Intl", {
    value: {
      // Our Intl implementation
    },
    enumerable: false,
    configurable: true,
    writable: true,
  });
}

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-globalthis

Browser-Kompatibilität

Siehe auch