JavaScript ist eine Programmiersprache; Node.js ist eine Runtime, ein Programm, das JavaScript außerhalb des Browsers ausführt. Syntax, Typen und Standardobjekte (Array, Promise, JSON) sind in beiden gleich. Was sich ändert, ist die Umgebung um deinen Code: Ein Browser gibt dir window und document, um mit einer Webseite zu arbeiten, während Node.js dir global, process, require und Module wie fs gibt, um mit Dateien, Servern und dem Betriebssystem zu arbeiten.
Die Browser-Globals haben undefined ausgegeben, die von Node.js object oder function, und die letzte Zeile true, weil globalThis und global in Node.js dasselbe Objekt sind. Füg die ersten sechs Zeilen in eine Browser-Konsole ein, und die Ergebnisse drehen sich um.
Der Unterschied in einer Tabelle
| JavaScript im Browser | JavaScript in Node.js | |
|---|---|---|
| Was es ist | Die Sprache, ausgeführt von der Engine des Browsers | Dieselbe Sprache, ausgeführt von der Node.js-Runtime (V8) |
| Globales Objekt | window | global |
| Arbeitet mit | Der Seite: document, dem DOM, Events | Dem Rechner: fs, http, process, os |
| Module | <script type="module">, import | require (CommonJS) und import (ES-Module) |
| Pakete | In die Seite gebündelt | Mit npm in node_modules installiert |
| Eingabe | Klicks, Formulare, Tastatur-Events | Kommandozeilenargumente, Standardeingabe, HTTP-Anfragen |
Array, Promise, JSON, setTimeout, console | Ja | Ja |
Die Zeile zu Modulen bringt die meisten Leute durcheinander. Node.js unterstützt beide Systeme, require und import, während Browser nur import verstehen. Die Seite CommonJS vs. ES-Module erklärt, welches du nehmen solltest.
Die Sprache ist dieselbe
Eine Funktion, die nur die Sprache nutzt, läuft überall. Dieser Block enthält nichts Node-Spezifisches und würde in einem Browser dieselben Zeilen ausgeben:
Es hat {"best":95,"average":85} und Passed: 2 of 3 ausgegeben. Spread-Syntax, reduce, Template Strings und JSON gehören zur Sprache, die der ECMAScript-Standard definiert, deshalb hat jede Runtime sie.
Was nur Node.js hat
Der Node-spezifische Teil sind die eingebauten Module und Globals, die mit dem Betriebssystem sprechen:
Es hat eine Datei geschrieben, sie zurückgelesen und .txt 2 lines ausgegeben, dann eine leere Liste von Argumenten. Weder Dateizugriff noch process.argv gibt es im Browser, wo eine Seite deine Festplatte nicht anfassen kann.
Welche Sprachfeatures du bekommst
Die Sprache hat Versionen (ES2015, ES2020, ES2024 und so weiter), und jede Engine führt neue Features in ihrem eigenen Tempo ein. Node.js bringt pro Release eine bestimmte V8-Engine mit, deine Node.js-Version entscheidet also, welche Features funktionieren: Object.groupBy und Array.prototype.findLast zum Beispiel brauchen eine aktuelle. Eine Kompatibilitätstabelle für Browser führt Node.js deshalb als weitere Spalte neben Chrome, Firefox und Safari. Führ node --version aus, wenn eine neuere Syntax mit einem SyntaxError fehlschlägt oder eine Methode undefined ist, und aktualisier, bevor du zu einem Polyfill greifst.
Code, der in beiden läuft
Autoren von Bibliotheken prüfen manchmal, wo ihr Code läuft, bevor sie eine umgebungsspezifische API nutzen:
const isNode = typeof process !== 'undefined' && process.versions?.node != null;
const isBrowser = typeof window !== 'undefined';
Prüf nach Möglichkeit auf das Feature, das du brauchst, nicht auf den Namen der Umgebung: typeof fetch === 'function' sagt mehr als "ist das Node". Beide haben heute fetch, URL, TextEncoder, setTimeout und structuredClone, es braucht also weniger Code eine Prüfung als noch vor ein paar Jahren.
Häufige Fehler
document oder window in einem Node.js-Skript verwenden. Du bekommst ReferenceError: document is not defined. Dieser Code gehört in einen Browser.
require im Browser verwenden. Browser haben es nicht. Nimm import oder einen Bundler, der require-Aufrufe in eine Datei verwandelt.
Glauben, Node.js sei eine andere Sprache. Ist es nicht. Was ein JavaScript-Tutorial beibringt, funktioniert in Node.js, außer es nutzt das DOM.
Häufig gestellte Fragen
Kann ich Node.js lernen, ohne JavaScript zu lernen?
Nicht wirklich. Jede Zeile, die du in Node.js schreibst, ist JavaScript, die Sprache kommt also zuerst. Sobald du Funktionen, Objekte und Promises kennst, ist Node.js eine Reihe zusätzlicher APIs, die du lernst.
Warum bekomme ich in Node.js "document is not defined"?
document ist das DOM des Browsers, und Node.js hat keine Seite, die dir eins geben könnte. Code, der document oder window anfasst, muss in einem Browser laufen oder in einem Test-Setup, das das DOM nachbildet, etwa jsdom.
Ist TypeScript dasselbe wie Node.js?
Nein. TypeScript ist eine typisierte Variante von JavaScript, die zu JavaScript kompiliert wird. Das Ergebnis kannst du in Node.js oder in einem Browser ausführen, und aktuelle Node.js-Versionen können viele .ts-Dateien auch direkt ausführen, indem sie die Typen entfernen.