Start · Sprachen · JavaScript · Referenz · globalThis

globalThis

Eigenschaft

Universeller Zugriff auf das globale Objekt in jedem JavaScript-Kontext – Browser, Node.js oder Web Worker.

seit JavaScript ES2020 Kategorie: core

Signatur

globalThis

Beschreibung

globalThis ist eine standardisierte Eigenschaft, die in jedem JavaScript-Ausführungskontext das globale Objekt repräsentiert. Vor ES2020 musste man je nach Umgebung unterschiedliche Bezeichner verwenden: window im Browser, global in Node.js oder self in Web Workern. globalThis vereinheitlicht diesen Zugriff und erlaubt das Schreiben von portablem Code, der in allen Umgebungen funktioniert.

Das über globalThis referenzierte Objekt ist dasselbe Objekt, das auch als this im globalen Scope verfügbar ist. Auf ihm sind alle globalen Variablen und Funktionen als Eigenschaften registriert – z. B. globalThis.setTimeout, globalThis.Math oder globalThis.fetch. Es ist also kein neues Objekt, sondern lediglich ein verlässlicher, umgebungsunabhängiger Zugang zu dem, was immer schon existiert hat.

Typische Anwendungsfälle sind universelle Bibliotheken (Polyfills, Utility-Module), die sowohl im Browser als auch in Node.js laufen sollen, und Situationen, in denen geprüft werden muss, ob eine bestimmte globale API überhaupt vorhanden ist. Außerdem ist globalThis nützlich in ES-Modulen, wo this auf oberster Ebene undefined ist, statt auf das globale Objekt zu zeigen.

  • Browser: globalThis === window ergibt true.
  • Node.js: globalThis === global ergibt true.
  • Web Worker: globalThis === self ergibt true.

Rückgabewert

Typ
object
Beschreibung
Das globale Objekt der jeweiligen Ausführungsumgebung (z. B. window, global oder self).

Beispiele

Umgebungsunabhängige Prüfung auf eine globale API

// Prüfen ob fetch verfügbar ist – egal ob Browser, Node.js oder Worker
if (typeof globalThis.fetch === 'function') {
  console.log('fetch ist verfügbar');
} else {
  console.log('fetch ist NICHT verfügbar – Polyfill wird geladen');
}
fetch ist verfügbar

Universelles Polyfill mit globalThis

// Ein einfaches Polyfill, das in jeder Umgebung funktioniert
if (!globalThis.myAppConfig) {
  globalThis.myAppConfig = {
    version: '1.0.0',
    debug: false,
  };
}

console.log(globalThis.myAppConfig.version);

// In einem ES-Modul ist top-level `this` undefined –
// globalThis ist hier die einzig sichere Alternative:
const isNode = typeof globalThis.process?.versions?.node === 'string';
console.log('Läuft in Node.js:', isNode);
1.0.0 Läuft in Node.js: true

Identitätsprüfung in verschiedenen Kontexten

// Im Browser-Hauptthread:
console.log(globalThis === window);  // true

// In Node.js:
console.log(globalThis === global);  // true

// Globale Variable über globalThis setzen und normal lesen:
globalThis.greet = (name) => `Hallo, ${name}!`;
console.log(greet('Welt')); // Hallo, Welt!
true Hallo, Welt!

// Wichtig · Fallstricke

Sicherheit: Das Schreiben von Werten auf globalThis entspricht dem Anlegen globaler Variablen – dies kann zu Namenskollisionen führen und sollte in Bibliotheken vermieden werden. Bevorzuge stattdessen Modul-Scope.

Strict Mode / ES-Module: In ES-Modulen ist this auf oberster Ebene immer undefined. globalThis ist dort die einzige standardkonforme Möglichkeit, das globale Objekt zu erreichen.

Browser-Kompatibilität: globalThis ist seit Chrome 71, Firefox 65, Safari 12.1, Edge 79 und Node.js 12 nativ verfügbar. Für ältere Umgebungen kann folgendes Polyfill verwendet werden: (function() { if (typeof globalThis === 'undefined') { Object.defineProperty(Object.prototype, '__magic__', { get: function() { return this; }, configurable: true }); __magic__.globalThis = __magic__; delete Object.prototype.__magic__; } }());

Siehe auch