Signatur
Beschreibung
Die Daten-Eigenschaft lineNumber einer Error-Instanz enthält die Zeilennummer der Datei, in der der Fehler erzeugt wurde. Die Zählung beginnt bei 1. Zusammen mit fileName und columnNumber hilft sie dabei, die Stelle im Quelltext zu finden, an der ein Fehler entstanden ist.
Die Eigenschaft ist nicht Teil von ECMAScript und wird nur von der Firefox-Engine SpiderMonkey bereitgestellt. In Chrome, Edge, Safari, Node.js und Deno ist sie undefined. Dort bekommt man die Position des Fehlers nur über den ebenfalls nicht standardisierten, aber überall verfügbaren String error.stack. Alternativ nutzt man bei globalen Fehlern das ErrorEvent, dessen Eigenschaft lineno standardisiert ist.
Man kann lineNumber auch selbst setzen: entweder als drittes Argument des nicht standardisierten Firefox-Konstruktors new Error(message, fileName, lineNumber) oder durch direkte Zuweisung. Die Eigenschaft ist schreibbar und konfigurierbar, aber nicht aufzählbar.
Rückgabewert
undefined, außer er wurde selbst gesetzt.Beispiele
Zeilennummer eines geworfenen Fehlers auslesen (Firefox)
try {
throw new Error('Konfiguration fehlt');
} catch (err) {
// In Firefox eine Zahl, anderswo undefined
console.log(err.lineNumber);
console.log(err.fileName);
}
Browserübergreifend: Fallback über error.stack
const getLineNumber = (err) => {
if (typeof err.lineNumber === 'number') return err.lineNumber;
// V8/JSC-Format: "at fn (datei.js:12:5)" bzw. Firefox: "fn@datei.js:12:5"
const match = err.stack?.match(/:(\d+):\d+\)?\s*(?:\n|$)/);
return match ? Number(match[1]) : null;
};
try {
JSON.parse('{ungültig}');
} catch (err) {
console.log(`Fehler in Zeile ${getLineNumber(err) ?? 'unbekannt'}`);
}
Globale Fehlerprotokollierung mit dem standardisierten ErrorEvent
window.addEventListener('error', (event) => {
// event.lineno ist standardisiert und funktioniert in allen Browsern
const report = {
message: event.message,
file: event.filename,
line: event.lineno,
column: event.colno,
legacyLine: event.error?.lineNumber // nur Firefox
};
console.log(report);
});
setTimeout(() => {
undefinedFunction();
}, 0);
lineNumber selbst setzen
const err = new Error('Validierung fehlgeschlagen');
err.lineNumber = 42; // funktioniert in jeder Engine als normale Eigenschaft
console.log(err.lineNumber);
console.log(Object.keys(err).includes('lineNumber'));
// Wichtig · Fallstricke
- Nicht standardisiert: Nur Firefox unterstützt
lineNumber. Chrome, Safari, Edge, Node.js und Deno liefernundefined. Im Produktivcode nie ohne Fallback verwenden. - In Firefox steht die Eigenschaft direkt auf der Instanz. Sie ist dort nicht aufzählbar und erscheint deshalb weder in
Object.keys()noch inJSON.stringify(). Wer sie selbst zuweist, erzeugt dagegen eine aufzählbare Eigenschaft. - Die Zahl gibt an, wo das Error-Objekt erzeugt wurde, nicht wo es geworfen wurde. Wird ein Fehler vorab erzeugt und erst später mit
throwgeworfen, zeigtlineNumberauf die Zeile mitnew Error(). - Bei minifiziertem oder transpiliertem Code bezieht sich die Zeile auf die ausgelieferte Datei. Um auf den Originalquelltext zu kommen, braucht man Source Maps.
- Bei Code aus
eval()odernew Function()ist die Zeile relativ zum ausgewerteten String und damit oft wenig aussagekräftig. - Bei Skripten von fremden Ursprüngen ohne CORS-Freigabe (
crossorigin-Attribut und passenderAccess-Control-Allow-Origin-Header) schwärzt der Browser die Fehlerdetails inErrorEventaus Sicherheitsgründen. Dann istlinenogleich0und die Meldung lautet nur „Script error.“.