Signatur
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
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}`);
}
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);
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));
}
// 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 vonthrow. - Selbst gesetzte Werte, etwa
err.columnNumber = 0, ändernerr.stacknicht. Dadurch können beide Angaben voneinander abweichen. - Bei Code aus
eval()odernew 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.colnoim globalenerror-Event.