Start · Sprachen · JavaScript · Referenz · console.warn()

console.warn()

Methode

Gibt eine Warnmeldung auf dem Log-Level „warning“ in der Konsole aus, meist gelb hervorgehoben und mit Warnsymbol.

seit JavaScript Baseline: alle Browser, Node.js alle Versionen Kategorie: webapi

Signatur

console.warn(val1, /* …, */ valN) / console.warn(msg, subst1, /* …, */ substN)

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

Typ
undefined
Beschreibung
Kein 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;
}
⚠ Ungültiger Timeout: -5 – verwende Standardwert 3000 ms

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
⚠ oldFormatDate() ist veraltet und wird in Version 3.0 entfernt. Bitte Intl.DateTimeFormat verwenden.

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);
⚠ Langsame Antwort (212 ms) von https://jsonplaceholder.typicode.com/todos/1 {status: 200, threshold: 50}

Gestylte Warnung mit %c (nur Browser)

console.warn(
  '%cAchtung:%c Der Speicher ist fast voll (%d %%).',
  'font-weight: bold; color: darkorange;',
  '',
  92
);
⚠ Achtung: Der Speicher ist fast voll (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.txt fängt Warnungen deshalb nicht mit ein, dafür brauchst du 2>&1. Für Laufzeitwarnungen gibt es in Node.js außerdem process.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) oder JSON.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 %c funktioniert 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.