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.
Die globale Eigenschaft globalThis
enthält den globalen this
-Wert, der normalerweise dem globalen Objekt ähnelt.
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 | |
---|---|
Schreibbar | ja |
Aufzählbar | nein |
Konfigurierbar | ja |
Hinweis:
Die Eigenschaft globalThis
ist konfigurierbar und beschreibbar, sodass Code-Autoren diese verstecken können, wenn nicht vertrauenswürdiger Code ausgeführt wird, um das globale Objekt nicht offenzulegen.
Beschreibung
Historisch betrachtet, 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 Webarbeitern funktioniert nur self
. In Node.js funktioniert keiner dieser Ansätze, stattdessen muss man global
verwenden. Das Schlüsselwort this
konnte innerhalb von Funktionen verwendet werden, die im nicht-strikten Modus ausgeführt werden, aber in Modulen und in Funktionen, die im strikten Modus ausgeführt werden, ist this
undefined
. Sie können auch Function('return this')()
verwenden, aber Umgebungen, die eval()
deaktivieren, wie CSP in Browsern, verhindern die Verwendung von Function
auf diese Weise.
Die Eigenschaft globalThis
bietet eine standardisierte Methode, um auf den globalen this
-Wert (und damit auf das globale Objekt selbst) in unterschiedlichen Umgebungen zuzugreifen. Im Gegensatz zu ähnlichen Eigenschaften wie window
und self
funktioniert sie garantiert sowohl in Fenster- als auch in Nicht-Fenster-Kontexten. Auf diese Weise können Sie auf das globale Objekt auf konsistente Weise zugreifen, ohne wissen zu müssen, in welcher Umgebung der Code ausgeführt wird. Um Ihnen zu helfen, sich den Namen zu merken: Im globalen Scope ist der this
-Wert globalThis
.
Hinweis:
globalThis
ist im Allgemeinen dasselbe Konzept wie das globale Objekt (d.h. wenn Sie Eigenschaften zu globalThis
hinzufügen, werden sie zu globalen Variablen) – dies ist der Fall für Browser und Node – aber Hosts dürfen einen anderen Wert für globalThis
bereitstellen, der nichts mit dem globalen Objekt zu tun hat.
HTML und das WindowProxy
In vielen Engines wird globalThis
eine Referenz auf das eigentliche globale Objekt sein, aber in Webbrowsern verweist es aufgrund von Sicherheitsaspekten bei iframes und fensterübergreifendem Zugriff auf einen Proxy
um das eigentliche globale Objekt (auf das Sie nicht direkt zugreifen können). Diese Unterscheidung ist in der üblichen Nutzung selten relevant, aber wichtig zu wissen.
Benennung
Mehrere andere beliebte Namensoptionen wie self
und global
wurden aufgrund ihres Potentials, die Kompatibilität mit bestehendem Code zu brechen, aus der Betrachtung genommen. Weitere Details finden Sie im „Namensgebung“-Dokument des Sprachvorschlags.
globalThis
ist buchstäblich der globale this
-Wert. Es ist derselbe Wert wie der this
-Wert in einer nicht-strikten Funktion, die ohne ein Objekt aufgerufen wird. Es ist auch der Wert von this
im globalen Scope eines Skripts.
Beispiele
Suche nach dem Globalen in verschiedenen Umgebungen
Normalerweise muss das globale Objekt nicht explizit angegeben werden – seine Eigenschaften sind automatisch als globale Variablen zugänglich.
console.log(window.Math === Math); // true
Ein Fall, in dem das globale Objekt jedoch explizit angesprochen werden muss, ist, wenn darauf geschrieben wird, normalerweise zwecks Polyfills.
Vor globalThis
war der einzige zuverlässige plattformübergreifende Weg, das globale Objekt für eine Umgebung zu erhalten, Function('return this')()
. Allerdings führt dies in einigen Einstellungen zu CSP-Verletzungen, so dass Autoren eine stückweise Definition wie diese verwenden würden (leicht angepasst aus dem originalen core-js-Quellcode):
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 Eigenschaften darauf definieren. Zum Beispiel das Hinzufügen einer Implementierung für Intl
:
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 globalThis
verfügbar, ist die zusätzliche Suche nach dem Globalen in verschiedenen Umgebungen nicht mehr notwendig:
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 |