globalThis

Die Eigenschaft globalThis gibt das globale Objekt der obersten Ebene zurück.

Eigenschaftsattribute von globalThis
Schreibbar ja
Aufzählbar nein
Konfigurierbar ja

Beschreibung

In der Vergangenheit war für den Zugriff auf das globale Objekt in verschiedenen JavaScript-Umgebungen eine unterschiedliche Syntax erforderlich. Im Web kann man window, self oder frames verwenden - aber in Web Workers funktioniert nur self. In Node.js funktioniert keines der aufgezählten, und es muss stattdessen global verwendet werden.

Das Schlüsselwort this kann in Funktionen verwendet werden, die nicht im Strict-Mode ausgeführt werden, ist jedoch in Modulen und in Funktionen, die im Strict-Mode ausgeführt werden, undefined. Es kann Function('return this')() verwendet werden, aber Umgebungen, die eval() deaktiviert haben, wie etwa durch CSP in Browsern, verhindern die Verwendung von Function auf diese Weise.

Die Eigenschaft globalThis bietet eine Standardmethode für den Zugriff auf den globalen Wert this (und damit auf das globale Objekt selbst) in verschiedenen Umgebungen. Im Gegensatz zu ähnlichen Eigenschaften wie window und self funktioniert es garantiert in Fenster- und Nicht-Fenster-Kontexten. Auf diese Weise können Sie auf konsistente 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, denken Sie daran, dass this im globalen Bereich globalThis ist.

HTML und WindowProxy

In vielen Engines ist globalThis ein Verweis auf das tatsächliche globale Objekt. In Webbrowsern wird jedoch aus Gründen der iframe- und fensterübergreifenden Sicherheit ein Proxy um das tatsächliche globale Objekt (das nicht direkt verwendet werden kann). Diese Unterscheidung ist im allgemeinen Sprachgebrauch selten relevant, aber wichtig zu beachten.

Benennung

Mehrere andere populäre Namen wie self und global wurden aus dem Vorschlag entfernt, da sie die Kompatibilität mit existierendem Code potenziell brechen könnten. Siehe das Dokument "Naming Constraints" für weitere Details.

Beispiele

Umgebungsübergreifend den globalen Kontext finden

Vor globalThis war Function('return this')() die einzige zuverlässige, plattformübergreifende Methode, um das globale Objekt für eine Umgebung abzurufen. Dies führt jedoch in einigen Einstellungen zu CSP Verstößen. Daher verwendet es6-shim eine Prüfung wie diese:

var getGlobal = function () { 
  if (typeof self !== 'undefined') { return self; } 
  if (typeof window !== 'undefined') { return window; } 
  if (typeof global !== 'undefined') { return global; } 
  throw new Error('unable to locate global object'); 
}; 

var globals = getGlobal(); 

if (typeof globals.setTimeout !== 'function') { 
  // no setTimeout in this environment! 
}

Mit der Verfügbarkeit von globalThis, ist die zusätzliche umgebungsübergreifende Suche nach dem Global Kontext nicht mehr notwendig:

if (typeof globalThis.setTimeout !== 'function') {
  // no setTimeout in this environment!
}

Spezifikationen

Specification
ECMAScript (ECMA-262)
Die Definition von 'globalThis' in dieser Spezifikation.

Browserkompatibilität

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid WebviewChrome für AndroidFirefox für AndroidOpera für AndroidSafari auf iOSSamsung InternetNode.js
globalThisChrome Vollständige Unterstützung 71Edge Vollständige Unterstützung 79Firefox Vollständige Unterstützung 65IE Keine Unterstützung NeinOpera Vollständige Unterstützung 58Safari Vollständige Unterstützung 12.1WebView Android Vollständige Unterstützung 71Chrome Android Vollständige Unterstützung 71Firefox Android Vollständige Unterstützung 65Opera Android Vollständige Unterstützung 50Safari iOS Vollständige Unterstützung 12.2Samsung Internet Android Vollständige Unterstützung 10.0nodejs Vollständige Unterstützung 12.0.0

Legende

Vollständige Unterstützung  
Vollständige Unterstützung
Keine Unterstützung  
Keine Unterstützung

Implementierungsfortschritt

Die folgende Tabelle enthält einen täglichen Implementierungsstatus für dieses Feature, da sie noch keine browserübergreifende Standardisierung erreicht hat. Die Daten werden generiert, indem die relevanten Funktionstests in Test262, der Standard-Testsuite von JavaScript, im nächtlichen Build oder in der neuesten Version der JavaScript-Engine jedes Browsers ausgeführt werden.

Siehe auch