Menu

Node.js vs. JavaScript: Was ist der Unterschied?

JavaScript ist die Sprache; Node.js ist ein Programm, das sie außerhalb des Browsers ausführt. Die Syntax ist identisch, aber die Globals und eingebauten APIs um deinen Code herum sind andere.

Diese Seite enthält ausführbare Editoren. Bearbeiten, ausführen und Ausgabe sofort sehen.

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 BrowserJavaScript in Node.js
Was es istDie Sprache, ausgeführt von der Engine des BrowsersDieselbe Sprache, ausgeführt von der Node.js-Runtime (V8)
Globales Objektwindowglobal
Arbeitet mitDer Seite: document, dem DOM, EventsDem Rechner: fs, http, process, os
Module<script type="module">, importrequire (CommonJS) und import (ES-Module)
PaketeIn die Seite gebündeltMit npm in node_modules installiert
EingabeKlicks, Formulare, Tastatur-EventsKommandozeilenargumente, Standardeingabe, HTTP-Anfragen
Array, Promise, JSON, setTimeout, consoleJaJa

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.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

Los geht's