Abschnitt 1 · Lektion 3
Browser gegen Node
Der häufigste Fehler beim Umstieg auf Node ist kein Syntaxfehler. Es ist der Griff nach document
oder localStorage, weil die Finger ihn tausendmal getippt haben. Diese Lektion räumt einmal auf,
damit du nicht bei jeder Fehlermeldung neu überlegen musst.
Drei Spalten im Kopf
Nur im Browser: window, document, localStorage, sessionStorage, alert, location,
navigator, alles rund um das DOM. Diese Namen gehören zur Seite, und in Node gibt es keine Seite.
Nur in Node: process (der laufende Prozess samt Argumenten, Umgebung und Exit-Code),
require, __dirname und __filename, der Zugriff auf Dateien über node:fs, das Anlegen eines
Servers über node:http. Diese Namen gehören zum Rechner, und im Browser hat dein Code keinen
Rechner, sondern eine Seite.
console.log("Node-Version:", process.version);
console.log("Verzeichnis:", process.cwd());
console.log("Plattform:", process.platform); process ist der Name, der dir in diesem Kurs am häufigsten begegnet. Er beschreibt das laufende
Programm selbst: welche Version von Node es ausführt, in welchem Verzeichnis es gestartet wurde, auf
welchem Betriebssystem. Abschnitt 4 nimmt sich process im Ganzen vor.
In beiden: die komplette Sprache. Variablen, Funktionen, Klassen, map, filter, reduce,
async und await, Destructuring, Spread. Dazu eine ganze Reihe eingebauter Objekte, die kein
Browser-Zubehör sind, sondern zum Standard gehören.
const adresse = new URL("https://mitmario.dev/lernen/nodejs?ab=1");
console.log(adresse.hostname);
console.log(adresse.searchParams.get("ab"));
console.log(JSON.stringify({ kurs: "Node", frei: false }));
console.log(new Date("2026-08-06T10:00:00Z").toISOString()); JSON, Date, Math, URL, Map, Set, Promise, setTimeout, console, crypto und seit
einigen Jahren auch fetch: das alles läuft hier wie dort. Diese gemeinsame Mitte ist über die
Jahre gewachsen. fetch gab es in Node lange nicht, jetzt schon.
globalThis ist die Brücke
Im Browser gibt es window, in Node nicht. In Node gibt es global, im Browser nicht. Beide sind
dasselbe Konzept: das Objekt, an dem die globalen Namen hängen.
Weil das lästig war, gibt es seit einigen Jahren globalThis. Der Name existiert in beiden Welten
und zeigt jeweils auf das richtige Objekt. Wer Code schreibt, der an beiden Orten laufen soll, nimmt
ihn.
Fragen, ohne anzufassen
Jetzt kommt der Teil, den du in der Aufgabe gleich brauchst.
Wenn du auf einen Namen zugreifst, den es nicht gibt, bricht dein Programm ab. Nicht mit einer
Warnung, sondern mit einem ReferenceError. Das gilt für document in Node genauso wie für
irgendeinen Tippfehler.
Es gibt genau einen Weg, nach einem Namen zu fragen, ohne ihn anzufassen: typeof.
// Ein direkter Zugriff auf einen unbekannten Namen bricht ab.
// typeof fragt nur nach und gibt "undefined" zurück.
console.log(typeof process);
console.log(typeof document);
console.log(typeof globalThis); typeof ist ein Operator und kein Funktionsaufruf, und er hat eine Eigenschaft, die sonst nichts
hat: Er wirft auch dann keinen Fehler, wenn der Name überhaupt nicht existiert. Dann liefert er die
Zeichenkette "undefined".
Merk dir die Schreibweise mit dem Vergleich auf die Zeichenkette:
Für eine Prüfung schreibst du typeof document === "undefined". Das doppelte undefined ist
verwirrend, aber richtig: Links steht der Operator, rechts der Text, den er zurückgibt, und der ist
ein ganz normaler String in Anführungszeichen.
Warum das praktisch zählt
Code, der nur die gemeinsame Mitte benutzt, läuft an beiden Orten. Das ist kein akademischer Punkt, sondern der Grund für eine Aufteilung, die du in echten Projekten überall siehst: die Rechenlogik in eigenen Dateien, die nichts über Fenster und nichts über Dateisysteme wissen, und drumherum eine dünne Schicht, die den Ort kennt.
Abschnitt 18 greift das als Projektstruktur wieder auf. Bis dahin reicht die Beobachtung: Je weniger dein Kern über seinen Ort weiß, desto leichter lässt er sich testen und desto länger überlebt er einen Umzug.
Zum Mitnehmen
typeof funktioniert auch bei Namen, die es gar nicht gibt. Das ist der einzige Weg, nach etwas zu fragen, ohne es anzufassen.
Jetzt du
Basis Konto, kostenlosZu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.
Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.
In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.
Was in dieser Lektion steckt
-
Artikel mit 3 Beispielen zum Ausprobieren
Steht hier, ohne Konto lesbar.
-
Aufgabe, dein Code läuft auf einem Server
Öffnet sich mit dem Basis Konto.