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 globalThis
globale Eigenschaft enthält den globalen this
-Wert, welcher üblicherweise 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 globalThis
-Eigenschaft ist konfigurierbar und beschreibbar, sodass Code-Autoren sie verbergen können, wenn nicht vertrauenswürdiger Code ausgeführt wird, um das globale Objekt vor einer Offenlegung zu schützen.
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 Workers funktioniert nur self
. In Node.js funktioniert keine dieser Optionen, und Sie müssen stattdessen global
verwenden. Das this
-Schlüsselwort konnte innerhalb von Funktionen im Nicht-strikt-Modus verwendet werden, aber this
ist innerhalb von Modulen und in Funktionen im strengen Modus 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 globalThis
-Eigenschaft bietet eine standardisierte Methode zum Zugriff auf den globalen this
-Wert (und damit auf das globale Objekt selbst) über verschiedene Umgebungen hinweg. Im Gegensatz zu ähnlichen Eigenschaften wie window
und self
funktioniert es garantiert in Kontexten mit und ohne Fenster. Auf diese Weise können Sie in konsistenter Weise auf das globale Objekt zugreifen, ohne wissen zu müssen, in welcher Umgebung der Code ausgeführt wird. Um sich den Namen zu merken, bedenken Sie einfach, dass im globalen Bereich der this
-Wert globalThis
ist.
Hinweis: globalThis
ist im Allgemeinen dasselbe Konzept wie das globale Objekt (d.h. das Hinzufügen von Eigenschaften zu globalThis
macht sie zu globalen Variablen) — das ist der Fall in Browsern und Node — aber Hosts dürfen einen anderen Wert für globalThis
bereitstellen, der nicht mit dem globalen Objekt zusammenhängt.
HTML und das WindowProxy
In vielen Engines wird globalThis
ein Verweis auf das tatsächliche globale Objekt sein, aber in Webbrowsern verweist es aufgrund von Sicherheitsüberlegungen zu iframes und Fensterübergriffen auf einen Proxy
um das tatsächliche globale Objekt herum (auf das Sie nicht direkt zugreifen können). Diese Unterscheidung ist in der alltäglichen Nutzung selten relevant, aber es ist wichtig, sich dessen bewusst zu sein.
Benennung
Mehrere andere beliebte Namenswahlen wie self
und global
wurden von der Überlegung ausgeschlossen, da sie die Kompatibilität mit bereits vorhandenem Code beeinträchtigen könnten. Weitere Details finden Sie im Benennungsdokument der Sprachvorschläge.
globalThis
ist, ganz wörtlich, der globale this
-Wert. Es ist derselbe Wert wie der this
-Wert in einer nicht-strikten Funktion, die ohne Objekt aufgerufen wird. Es ist auch der Wert von this
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.
console.log(window.Math === Math); // true
Ein Fall, in dem man explizit auf das globale Objekt zugreifen muss, ist das Schreiben darauf, normalerweise zum Zweck von Polyfills.
Vor globalThis
war die einzige verlässliche plattformübergreifende Methode, das globale Objekt für eine Umgebung zu erhalten, Function('return this')()
. Dies führt jedoch in einigen Einstellungen zu CSP-Verletzungen, sodass Autoren eine stückweise Definition wie diese verwenden würden (leicht angepasst aus der ursprünglichen core-js Quelle):
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 erlangt wurde, können wir neue globale Variablen darauf definieren. Zum Beispiel, indem wir eine Implementierung für Intl
hinzufügen:
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 über Umgebungen hinweg nicht mehr erforderlich:
if (typeof globalThis.Intl === "undefined") {
Object.defineProperty(globalThis, "Intl", {
value: {
// Our Intl implementation
},
enumerable: false,
configurable: true,
writable: true,
});
}
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-globalthis |