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 meist 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 Objekt this
.
Eigenschaften von globalThis | |
---|---|
Schreibbar | ja |
Aufzählbar | nein |
Konfigurierbar | ja |
Hinweis:
Die Eigenschaft globalThis
ist konfigurierbar und beschreibbar, sodass Codeautoren sie verbergen können, wenn nicht vertrauenswürdiger Code ausgeführt wird, um zu verhindern, dass das globale Objekt offengelegt wird.
Beschreibung
Historisch war der Zugriff auf das globale Objekt in verschiedenen JavaScript-Umgebungen von unterschiedlicher Syntax abhängig. Im Web können Sie window
, self
oder frames
verwenden – in Web-Workern funktioniert jedoch nur self
. In Node.js funktionieren keiner dieser Ansätze, stattdessen muss global
verwendet werden. Das Schlüsselwort this
konnte in Funktionen, die im Nicht-Strikt-Modus ausgeführt wurden, verwendet werden, aber this
ist in Modulen und in Funktionen, die im strikten Modus ausgeführt werden, undefined
. Außerdem können Sie Function('return this')()
nutzen, jedoch verhindern Umgebungen, die eval()
deaktivieren, wie CSP in Browsern, die Verwendung von Function
auf diese Weise.
Die Eigenschaft globalThis
bietet eine standardisierte Methode, den globalen this
-Wert (und damit das globale Objekt selbst) in verschiedenen Umgebungen zuzugreifen. Im Gegensatz zu ähnlichen Eigenschaften wie window
und self
ist garantiert, dass sie sowohl in Fenster- als auch in Nicht-Fenster-Kontexten funktioniert. 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. Zur Erinnerung an den Namen: Im globalen Gültigkeitsbereich ist der Wert von this
globalThis
.
Hinweis: globalThis
entspricht im Allgemeinen demselben Konzept wie das globale Objekt (das heißt, das Hinzufügen von Eigenschaften zu globalThis
macht sie zu globalen Variablen) – dies gilt für Browser und Node – aber Hosts dürfen einen anderen Wert für globalThis
bereitstellen, der nicht mit dem globalen Objekt zusammenhängt.
HTML und die WindowProxy
In vielen Engines ist globalThis
eine Referenz auf das tatsächliche globale Objekt, in Web-Browsern jedoch verweist es aufgrund von Sicherheitsüberlegungen in Bezug auf iframes und Cross-Window auf einen Proxy
um das tatsächliche globale Objekt (auf das Sie nicht direkt zugreifen können). Dieser Unterschied ist in der üblichen Nutzung selten relevant, aber es ist wichtig, ihn zu kennen.
Benennung
Mehrere andere populäre Namensoptionen wie self
und global
wurden aus der Betrachtung ausgeschlossen, da sie die Abwärtskompatibilität mit existierendem Code gefährden könnten. Weitere Details finden Sie im "naming"-Dokument des Sprachvorschlags.
globalThis
ist buchstäblich der globale this
-Wert. Es ist derselbe Wert wie der this
-Wert in einer Nicht-Strikt-Funktion, die ohne Objekt aufgerufen wird. Es ist auch der Wert von this
im globalen Gültigkeitsbereich eines Skripts.
Beispiele
Suche nach dem globalen Objekt 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 explizit aufgerufen werden muss, ist das Schreiben darauf, meist für den Zweck eines Polyfills.
Vor globalThis
war der einzige zuverlässige plattformübergreifende Weg, das globale Objekt für eine Umgebung zu erhalten, Function('return this')()
. Dies verursacht jedoch CSP-Verletzungen in einigen Einstellungen, weshalb Autoren eine stückweise Definition wie diese verwenden würden (leicht angepasst aus dem ursprünglichen 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 Variablen darauf definieren. Beispielsweise eine 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
ist die zusätzliche Suche nach dem globalen Objekt in verschiedenen Umgebungen nicht mehr nötig:
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 |
Browser-Kompatibilität
Report problems with this compatibility data on GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
globalThis |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support