Signatur
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
undefinederzeugen:void 0ist kurz und ergibt immer den echten Wertundefined. Das war früher wichtig, weil der Bezeichnerundefinedvor ES5 überschrieben werden konnte. Minifier setzenvoid 0bis heute ein. - Pfeilfunktionen ohne Rückgabewert:
() => void doSomething()stellt sicher, dass der Rückgabewert vondoSomething()nicht versehentlich weitergegeben wird. - Bewusst nicht abgewartete Promises: Mit
void promisezeigt man Lesern und Lintern (z. B.@typescript-eslint/no-floating-promises), dass ein Promise absichtlich nicht mitawaitabgewartet 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
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);
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);
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();
Rangfolge beachten
console.log(void 2 === '2'); // (void 2) === '2'
console.log(void (2 === '2')); // void false
IIFE mit void
void function init() {
console.log('Initialisiert');
}();
// Wichtig · Fallstricke
- Rangfolge:
void a + bwird als(void a) + bausgewertet. 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">undaddEventListeneroderevent.preventDefault().- Fehler werden nicht verschluckt:
voidfängt keine Ausnahmen ab. Auch ein mitvoidmarkiertes Promise, das abgelehnt wird, löst ohne.catch()eineunhandledrejectionaus. undefinedist sicher: Seit ES5 ist das globaleundefinedschreibgeschützt. Man brauchtvoid 0also nicht mehr zur Absicherung. Lokal kannundefinedaber weiterhin als Variablenname verdeckt werden.- TypeScript: Der Typ
voidin TypeScript ist etwas anderes als der Operatorvoid. Beide nicht verwechseln.