Start · Sprachen · JavaScript · Referenz · void-Operator

void-Operator

Operator

Der <code>void</code>-Operator wertet einen Ausdruck aus, verwirft dessen Ergebnis und liefert immer <code>undefined</code>.

seit JavaScript ES1 – Baseline: alle Browser Kategorie: syntax

Signatur

void expression

Beschreibung

Der unäre Operator void wertet den folgenden Ausdruck vollständig aus, einschließlich aller Nebeneffekte wie Funktionsaufrufe oder Zuweisungen. Das Ergebnis wird anschließend verworfen, und der gesamte Ausdruck ergibt immer undefined.

Typische Einsatzgebiete:

  • Zuverlässig undefined erzeugen: void 0 ist kurz und ergibt immer den echten Wert undefined. Das war früher wichtig, weil der Bezeichner undefined vor ES5 überschrieben werden konnte. Minifier setzen void 0 bis heute ein.
  • Pfeilfunktionen ohne Rückgabewert: () => void doSomething() stellt sicher, dass der Rückgabewert von doSomething() nicht versehentlich weitergegeben wird.
  • Bewusst nicht abgewartete Promises: Mit void promise zeigt man Lesern und Lintern (z. B. @typescript-eslint/no-floating-promises), dass ein Promise absichtlich nicht mit await abgewartet wird.
  • IIFEs: void function () { … }() macht aus einer Funktionsdeklaration einen Ausdruck, der sofort ausgeführt werden kann.

void hat dieselbe hohe Rangfolge wie andere unäre Operatoren (typeof, !). Bei zusammengesetzten Ausdrücken sollte man deshalb Klammern setzen: void (a + b).

Parameter

Name Typ Default Beschreibung
$expression Pflicht any Ein beliebiger Ausdruck. Er wird ausgewertet, einschließlich seiner Nebeneffekte, das Ergebnis wird aber verworfen.

Rückgabewert

Typ
undefined
Beschreibung
Immer undefined, egal welchen Wert der Ausdruck liefert.

Beispiele

Grundverhalten und void 0

console.log(void 0);
console.log(void 'Hallo');
console.log(void (1 + 2));

let counter = 0;
const result = void counter++; // Nebeneffekt wird ausgeführt
console.log(result, counter);
undefined undefined undefined undefined 1

Pfeilfunktion ohne Rückgabewert

const log = [];

// Ohne void würde push() die neue Länge zurückgeben
const addEntry = (entry) => void log.push(entry);

console.log(addEntry('Start'));
console.log(log);
undefined [ 'Start' ]

Promise bewusst nicht abwarten

const sendAnalytics = async (event) => {
  await fetch('/api/analytics', {
    method: 'POST',
    body: JSON.stringify({ event })
  });
};

const handleClick = () => {
  // Absichtlich nicht abgewartet: Die Oberfläche soll nicht blockieren
  void sendAnalytics('button_click').catch(console.error);
  console.log('Klick verarbeitet');
};

handleClick();
Klick verarbeitet

Rangfolge beachten

console.log(void 2 === '2');   // (void 2) === '2'
console.log(void (2 === '2')); // void false
false undefined

IIFE mit void

void function init() {
  console.log('Initialisiert');
}();
Initialisiert

// Wichtig · Fallstricke

  • Rangfolge: void a + b wird als (void a) + b ausgewertet. Setze bei zusammengesetzten Ausdrücken Klammern.
  • javascript:void(0)-Links: Die Schreibweise <a href="javascript:void(0)"> ist veraltet. Sie ist schlecht für die Barrierefreiheit und wird von einer strengen Content Security Policy blockiert, wenn diese kein 'unsafe-inline' erlaubt. Verwende stattdessen <button type="button"> und addEventListener oder event.preventDefault().
  • Fehler werden nicht verschluckt: void fängt keine Ausnahmen ab. Auch ein mit void markiertes Promise, das abgelehnt wird, löst ohne .catch() eine unhandledrejection aus.
  • undefined ist sicher: Seit ES5 ist das globale undefined schreibgeschützt. Man braucht void 0 also nicht mehr zur Absicherung. Lokal kann undefined aber weiterhin als Variablenname verdeckt werden.
  • TypeScript: Der Typ void in TypeScript ist etwas anderes als der Operator void. Beide nicht verwechseln.