Start · Sprachen · JavaScript · Referenz · Error: message

Error: message

Eigenschaft

Die Eigenschaft <code>message</code> einer <code>Error</code>-Instanz enthält eine menschenlesbare Beschreibung des Fehlers als String.

seit JavaScript ES1 – Baseline: alle Browser, Node.js Kategorie: method-property

Signatur

Error.prototype.message

Beschreibung

Die Dateneigenschaft message beschreibt einen Fehler in Textform. Wenn Sie dem Konstruktor new Error(message) (oder einer Unterklasse wie TypeError, RangeError usw.) ein erstes Argument übergeben, wird es in einen String umgewandelt und als eigene Eigenschaft der Instanz gespeichert. Diese Eigenschaft ist beschreibbar und konfigurierbar, aber nicht aufzählbar.

Ohne Argument (oder mit undefined) legt der Konstruktor keine eigene Eigenschaft an. Dann wird Error.prototype.message aus der Prototypkette gelesen, und das ist der leere String "".

message wird unter anderem von Error.prototype.toString() verwendet. Das Ergebnis hat das Format "Name: Nachricht". Auch die Browser-Konsole und Node.js greifen darauf zurück, wenn ein nicht abgefangener Fehler ausgegeben wird. In der Praxis nutzen Sie message für Logging, für Fehlermeldungen in der Oberfläche und für eigene Fehlerklassen.

Weil die Eigenschaft nicht aufzählbar ist, erscheint sie weder in Object.keys() noch in JSON.stringify(). Zum Serialisieren müssen Sie sie deshalb ausdrücklich übernehmen.

Rückgabewert

Typ
string
Beschreibung
Die Fehlerbeschreibung. Der Wert ist "", wenn beim Erzeugen keine Nachricht angegeben wurde. Nicht-String-Argumente werden per String() umgewandelt.

Beispiele

Nachricht setzen und auslesen

const err = new Error('Datei konnte nicht geladen werden');
console.log(err.message);
console.log(err.toString());

// Ohne Argument: geerbter leerer String
const leer = new Error();
console.log(JSON.stringify(leer.message), Object.hasOwn(leer, 'message'));
Datei konnte nicht geladen werden Error: Datei konnte nicht geladen werden "" false

Fehlermeldung im catch-Block anzeigen

const parseConfig = (text) => {
  try {
    return JSON.parse(text);
  } catch (err) {
    // err ist hier ein SyntaxError
    console.error(`Konfiguration ungültig: ${err.message}`);
    return null;
  }
};

parseConfig('{ ungültig }');
Konfiguration ungültig: Expected property name or '}' in JSON at position 2 (line 1 column 3) (der genaue Wortlaut hängt von der Engine ab)

Eigene Fehlerklasse mit aussagekräftiger Nachricht

class HttpError extends Error {
  constructor(status, url) {
    super(`HTTP ${status} beim Abruf von ${url}`);
    this.name = 'HttpError';
    this.status = status;
  }
}

const load = async (url) => {
  const res = await fetch(url);
  if (!res.ok) throw new HttpError(res.status, url);
  return res.json();
};

load('https://example.com/nicht-da').catch((err) => {
  console.log(err.name, '-', err.message);
});
HttpError - HTTP 404 beim Abruf von https://example.com/nicht-da

Fehler korrekt als JSON serialisieren

const err = new RangeError('Wert muss zwischen 1 und 10 liegen');

console.log(JSON.stringify(err)); // message ist nicht aufzählbar

const payload = JSON.stringify({ name: err.name, message: err.message });
console.log(payload);
{} {"name":"RangeError","message":"Wert muss zwischen 1 und 10 liegen"}

// Wichtig · Fallstricke

  • Nicht aufzählbar: JSON.stringify(error) liefert "{}". Übernehmen Sie message, name und gegebenenfalls stack ausdrücklich.
  • Kein Verlass auf den Wortlaut: Nachrichten von eingebauten Fehlern, etwa aus JSON.parse oder bei TypeError, unterscheiden sich zwischen V8, SpiderMonkey und JavaScriptCore und können sich mit jeder Version ändern. Unterscheiden Sie Fehler deshalb über instanceof, name oder einen eigenen code, nicht über String-Vergleiche mit message.
  • Nicht jeder geworfene Wert ist ein Error: Mit throw "Text" oder throw 42 geworfene Werte haben kein message. Prüfen Sie im catch defensiv, zum Beispiel mit err instanceof Error ? err.message : String(err).
  • Typumwandlung: new Error({}) ergibt die Nachricht "[object Object]". Übergeben Sie daher immer einen String.
  • Sicherheit: Fehlermeldungen können Nutzereingaben oder interne Details enthalten, etwa Pfade oder SQL-Fragmente. Geben Sie message nie ungeprüft per innerHTML aus, sondern verwenden Sie textContent, um XSS zu vermeiden. Zeigen Sie Endnutzern auch keine internen Details aus Server-Fehlern.
  • Für verkettete Fehler steht seit ES2022 die Option cause zur Verfügung: new Error(msg, { cause }). So müssen Sie die ursprüngliche Nachricht nicht in den Text einbauen.