Signatur
Beschreibung
Die statische Methode console.warn() schreibt eine Meldung auf dem Log-Level „warning“ in die Konsole. In den Entwicklerwerkzeugen der Browser wird sie meist gelb hinterlegt und mit einem Warnsymbol angezeigt. In vielen Browsern (z. B. Chrome, Firefox) lässt sich zusätzlich ein Stacktrace aufklappen, über den man die Aufrufstelle findet.
Sinnvoll ist console.warn() für Situationen, die kein Fehler sind, aber Aufmerksamkeit brauchen: veraltete (deprecated) APIs, ungültige Konfigurationswerte, auf die ein Standardwert folgt, langsame Antwortzeiten oder fehlende optionale Ressourcen. Echte Fehler gehören zu console.error(), normale Ablaufinformationen zu console.log() oder console.info().
Die Methode nimmt beliebig viele Werte entgegen. Ist das erste Argument ein String, kann er Platzhalter wie %s, %d, %o oder %c enthalten, die durch die nachfolgenden Argumente ersetzt werden. Ob die Meldung sichtbar ist, hängt vom Log-Level-Filter der Konsole ab. Den stellt der Nutzer normalerweise in der Konsolen-Oberfläche ein.
In Node.js schreibt console.warn() nach stderr (genau wie console.error()), nicht nach stdout. Das ist wichtig, wenn du Ausgaben umleitest oder weiterverarbeitest.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $val1 … valN | any | Beliebige Werte (Strings, Zahlen, Objekte, Arrays, Fehler …). Sie werden nacheinander ausgegeben, getrennt durch Leerzeichen. Objekte lassen sich in den Browser-Werkzeugen meist aufklappen. | |
| $msg | string | String mit Platzhaltern: %s (String), %d/%i (Ganzzahl), %f (Gleitkommazahl), %o/%O (Objekt), %c (CSS, nur im Browser). |
|
| $subst1 … substN | any | Werte, die der Reihe nach für die Platzhalter in msg eingesetzt werden. Überzählige Werte werden einfach hinten angehängt. |
Rückgabewert
undefined).Beispiele
Einfache Warnung mit mehreren Werten
const config = { timeout: -5 };
if (config.timeout < 0) {
console.warn('Ungültiger Timeout:', config.timeout, '– verwende Standardwert 3000 ms');
config.timeout = 3000;
}
Hinweis auf veraltete Funktion (Deprecation)
const warned = new Set();
const deprecate = (name, replacement) => {
// jede Warnung nur einmal ausgeben
if (warned.has(name)) return;
warned.add(name);
console.warn('%s ist veraltet und wird in Version 3.0 entfernt. Bitte %s verwenden.', name, replacement);
};
const oldFormatDate = (date) => {
deprecate('oldFormatDate()', 'Intl.DateTimeFormat');
return date.toISOString().slice(0, 10);
};
oldFormatDate(new Date('2024-05-01'));
oldFormatDate(new Date('2024-05-02')); // keine zweite Warnung
Langsame API-Antwort mit Kontextobjekt melden
const fetchWithTiming = async (url, threshold = 1000) => {
const start = performance.now();
const response = await fetch(url);
const duration = Math.round(performance.now() - start);
if (duration > threshold) {
console.warn('Langsame Antwort (%d ms) von %s', duration, url, {
status: response.status,
threshold
});
}
return response.json();
};
fetchWithTiming('https://jsonplaceholder.typicode.com/todos/1', 50);
Gestylte Warnung mit %c (nur Browser)
console.warn(
'%cAchtung:%c Der Speicher ist fast voll (%d %%).',
'font-weight: bold; color: darkorange;',
'',
92
);
// Wichtig · Fallstricke
- Filter der Konsole: Hat der Nutzer das Level „Warnungen“ ausgeblendet, sieht er die Ausgabe nicht. Verlass dich für wichtige Hinweise an Endnutzer also nicht auf die Konsole.
- Node.js: Die Ausgabe landet auf
stderr.node app.js > log.txtfängt Warnungen deshalb nicht mit ein, dafür brauchst du2>&1. Für Laufzeitwarnungen gibt es in Node.js außerdemprocess.emitWarning(). - Objekte werden „live“ angezeigt: Browser werten aufgeklappte Objekte oft erst beim Aufklappen aus. Später geänderte Werte erscheinen dann schon in der alten Warnung. Abhilfe:
structuredClone(obj)oderJSON.stringify(obj)übergeben. - Performance und Sicherheit: Warnungen in engen Schleifen bremsen die Anwendung spürbar. Entferne Debug-Ausgaben im Produktionsbuild oder filtere sie per Bundler/Linter heraus (z. B. ESLint
no-console). Gib keine sensiblen Daten wie Token oder Passwörter aus, denn jeder Nutzer kann die Konsole öffnen. - Der Platzhalter
%cfunktioniert nur in Browsern. Node.js ignoriert das CSS. - Die Methode wird von allen modernen Browsern und von Node.js unterstützt, auch in Web Workern.