Start · Sprachen · JavaScript · Referenz · Error: columnNumber

Error: columnNumber

Eigenschaft

Die nicht standardisierte Eigenschaft <code>columnNumber</code> einer <code>Error</code>-Instanz gibt die Spalte in der Quelltextzeile an, in der der Fehler entstanden ist.

seit JavaScript Nicht standardisiert – nur Firefox (SpiderMonkey) Kategorie: method-property

Signatur

error.columnNumber

Beschreibung

Die Eigenschaft columnNumber gehört einer Error-Instanz selbst (Datenfeld, keine Prototyp-Eigenschaft). Sie enthält eine Zahl, die angibt, in welcher Spalte der Zeile lineNumber der Datei fileName der Fehler erzeugt wurde. In Firefox beginnt die Zählung bei 1.

Nützlich ist sie vor allem beim Debuggen und Protokollieren: Zusammen mit fileName und lineNumber lässt sich die genaue Fehlerstelle angeben, zum Beispiel in einem selbst gebauten Fehlerbericht oder beim Auswerten minifizierter Skripte, in denen der gesamte Code in einer einzigen Zeile steht.

Die Eigenschaft ist nicht Teil von ECMAScript und wird nur von der SpiderMonkey-Engine (Firefox) unterstützt. Chrome, Edge, Safari und Node.js stellen sie nicht bereit. Dort musst du auf error.stack ausweichen oder im globalen error-Event die Eigenschaft ErrorEvent.colno nutzen, die alle Browser unterstützen.

Die Eigenschaft ist schreibbar und konfigurierbar. Du kannst sie also überschreiben, ohne dass sich stack dadurch ändert.

Rückgabewert

Typ
number | undefined
Beschreibung
Positive Ganzzahl mit der Spaltennummer (in Firefox ab 1 gezählt). In Engines ohne Unterstützung ist der Wert undefined.

Beispiele

Spaltennummer eines geworfenen Fehlers auslesen

try {
  null.foo; // löst einen TypeError aus
} catch (err) {
  console.log(`${err.name} in Zeile ${err.lineNumber}, Spalte ${err.columnNumber}`);
}
TypeError in Zeile 2, Spalte 3 // Firefox TypeError in Zeile undefined, Spalte undefined // andere Engines

Browserübergreifende Fehlerposition mit Rückfall auf ErrorEvent.colno

window.addEventListener('error', (event) => {
  const err = event.error;
  // Firefox kennt err.columnNumber, alle Browser kennen event.colno
  const spalte = err?.columnNumber ?? event.colno;
  const zeile = err?.lineNumber ?? event.lineno;
  console.log(`Fehler in ${event.filename}:${zeile}:${spalte} – ${event.message}`);
});

setTimeout(() => {
  undefinedFunction();
}, 0);
Fehler in https://example.com/app.js:9:3 – ReferenceError: undefinedFunction is not defined

Hilfsfunktion zur Positionsermittlung mit Feature-Erkennung

const getErrorPosition = (err) => {
  if (typeof err.columnNumber === 'number') {
    return { line: err.lineNumber, column: err.columnNumber };
  }
  // Rückfall: erste Stack-Zeile mit :zeile:spalte auswerten (V8/JSC-Format)
  const match = err.stack?.match(/:(\d+):(\d+)\)?\s*$/m);
  return match
    ? { line: Number(match[1]), column: Number(match[2]) }
    : { line: undefined, column: undefined };
};

try {
  JSON.parse('{ungültig}');
} catch (err) {
  console.log(getErrorPosition(err));
}
{ line: 14, column: 8 } // Werte abhängig von Engine und Datei

// Wichtig · Fallstricke

  • Nicht standardisiert: Nur Firefox unterstützt die Eigenschaft. Verwende sie nicht in Produktionscode ohne Feature-Erkennung (typeof err.columnNumber === 'number').
  • Bei new Error() wird die Spalte der Stelle gespeichert, an der das Objekt erzeugt wurde, nicht die Stelle von throw.
  • Selbst gesetzte Werte, etwa err.columnNumber = 0, ändern err.stack nicht. Dadurch können beide Angaben voneinander abweichen.
  • Bei Code aus eval() oder new Function() bezieht sich die Spalte auf den ausgewerteten Quelltext, nicht auf die aufrufende Datei.
  • Bei minifiziertem Code bezieht sich die Spalte auf die ausgelieferte Datei. Die Originalposition findest du nur über Source Maps.
  • Browserübergreifend verlässlich ist ErrorEvent.colno im globalen error-Event.