Signatur
Beschreibung
null ist ein Literal und einer der sieben primitiven Werte in JavaScript. Es zeigt an, dass eine Variable oder Eigenschaft absichtlich keinen Wert bzw. kein Objekt enthält. Anders als ein nicht deklarierter Bezeichner ist null ein echter, zuweisbarer Wert. Da es sich um ein reserviertes Wort handelt, kann es nicht als Variablenname verwendet werden.
Der Unterschied zu undefined ist vor allem ein inhaltlicher: undefined bedeutet „wurde nie gesetzt“ (z. B. nicht initialisierte Variablen, fehlende Parameter, nicht vorhandene Eigenschaften), während null bedeutet „wurde bewusst auf leer gesetzt“. Viele APIs geben null zurück, wenn nichts gefunden wurde, etwa document.querySelector(), String.prototype.match() oder localStorage.getItem().
Typische Einsatzgebiete sind das Zurücksetzen von Referenzen (z. B. damit der Garbage Collector ein Objekt freigeben kann), Platzhalter für später zu ladende Daten, das Kennzeichnen leerer Felder in JSON sowie die Erzeugung prototypfreier Objekte mit Object.create(null). null steht außerdem am Ende jeder Prototypkette.
Zum Prüfen sollte man value === null verwenden. Möchte man null und undefined gemeinsam behandeln, eignen sich value == null, der Nullish-Coalescing-Operator ?? und die optionale Verkettung ?..
Rückgabewert
null. Achtung: typeof null ergibt aus historischen Gründen "object".Beispiele
Grundverhalten und Vergleiche
let user = null; // bewusst noch kein Benutzer
console.log(user); // null
console.log(typeof user); // "object" (historischer Fehler)
console.log(user === null); // true
console.log(user === undefined); // false
console.log(user == undefined); // true (lose Gleichheit)
console.log(null + 1); // 1 (null wird zu 0)
console.log(Boolean(null)); // false
API-Rückgaben mit ?? und ?. absichern
// localStorage.getItem liefert null, wenn der Schlüssel fehlt
const theme = localStorage.getItem('theme') ?? 'light';
console.log(theme);
// querySelector liefert null, wenn kein Element passt
const title = document.querySelector('#nicht-vorhanden');
console.log(title?.textContent ?? 'Kein Titel gefunden');
// match liefert null bei keinem Treffer
const m = 'abc'.match(/\d+/);
console.log(m === null ? 'Keine Zahl' : m[0]);
Referenz freigeben und leere Felder in JSON
class ImageCache {
#data = new Map();
#current = null;
load(url) {
this.#current = { url, loadedAt: Date.now() };
this.#data.set(url, this.#current);
}
clear() {
this.#data.clear();
this.#current = null; // Referenz für den Garbage Collector freigeben
}
get current() { return this.#current; }
}
const cache = new ImageCache();
cache.load('/logo.png');
cache.clear();
console.log(cache.current);
// null bleibt in JSON erhalten, undefined nicht
console.log(JSON.stringify({ a: null, b: undefined }));
Prototypfreies Objekt als Wörterbuch
const dict = Object.create(null);
dict.toString = 'kein Konflikt';
console.log(Object.getPrototypeOf(dict)); // null
console.log('hasOwnProperty' in dict); // false
console.log(Object.getPrototypeOf(Object.prototype)); // null – Ende der Kette
// Wichtig · Fallstricke
typeof null === "object": ein seit der ersten JavaScript-Version bestehender Fehler, der aus Kompatibilitätsgründen nie behoben wurde. Zur Objektprüfung dahervalue !== null && typeof value === 'object'verwenden.- Standardparameter greifen nicht bei
null:function f(x = 5) {}–f(undefined)ergibt 5,f(null)ergibtnull. Dasselbe gilt für Standardwerte bei der Destrukturierung. - Numerische Umwandlung:
nullwird zu0(null + 1 === 1,null >= 0isttrue), abernull == 0istfalse.undefinedwird dagegen zuNaN. ||vs.??:||ersetzt auch0,''undfalse;??reagiert nur aufnullundundefined.- Laufzeitfehler: Eigenschaftszugriffe auf
nullwerfen einenTypeError(„Cannot read properties of null“). Mit?.absichern. nullist ein Literal, keine Eigenschaft des globalen Objekts (im Gegensatz zuundefined) und kann weder überschrieben noch als Bezeichner genutzt werden.- In TypeScript wird
nullmitstrictNullCheckszu einem eigenen Typ, der explizit (z. B.string | null) erlaubt werden muss.