Signatur
Beschreibung
Der logische NICHT-Operator (!) ist ein unärer Präfix-Operator, der den booleschen Wahrheitswert seines Operanden invertiert. Ist der Operand truthy (also in einem booleschen Kontext true), gibt ! den Wert false zurück. Ist der Operand falsy (z. B. 0, "", null, undefined, NaN oder false), gibt ! den Wert true zurück.
Wichtig: Der Operator konvertiert den Operanden zunächst implizit in einen booleschen Wert (wie Boolean(x)), bevor er die Negation durchführt. Das Ergebnis ist deshalb stets ein echter boolean-Wert (true oder false), unabhängig vom ursprünglichen Typ des Operanden.
Ein häufiger Einsatzfall ist die doppelte Negation (!!): Durch zweimaliges Anwenden von ! lässt sich ein beliebiger Wert zuverlässig in sein boolesches Äquivalent umwandeln – eine kompakte Alternative zu Boolean(x). Dies wird oft genutzt, um explizit zu prüfen, ob ein Wert truthy oder falsy ist.
Der !-Operator hat eine sehr hohe Bindungsstärke (Priorität) und bindet stärker als die meisten anderen Operatoren (z. B. stärker als &&, || oder Vergleichsoperatoren). Bei komplexen Ausdrücken sollten deshalb Klammern gesetzt werden, um die gewünschte Auswertungsreihenfolge sicherzustellen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $expression Pflicht | any | — | Ein beliebiger JavaScript-Ausdruck oder Wert, dessen boolescher Wahrheitswert invertiert werden soll. |
Rückgabewert
false zurück, wenn der Operand truthy ist; gibt true zurück, wenn der Operand falsy ist. Das Ergebnis ist stets ein primitiver boolean-Wert.Beispiele
Grundlegende Verwendung mit booleschen Werten
console.log(!true); // false
console.log(!false); // true
const isLoggedIn = false;
if (!isLoggedIn) {
console.log('Bitte anmelden.');
}
Negation von truthy und falsy Werten
// Falsy-Werte → ! ergibt true
console.log(!0); // true
console.log(!''); // true
console.log(!null); // true
console.log(!undefined); // true
console.log(!NaN); // true
// Truthy-Werte → ! ergibt false
console.log(!1); // false
console.log(!'Hallo'); // false
console.log(![]); // false (leeres Array ist truthy!)
console.log(!{}); // false (leeres Objekt ist truthy!)
Doppelte Negation (!!) zur Boolean-Konvertierung
// !! wandelt jeden Wert in seinen booleschen Äquivalent um
const username = 'Alice';
console.log(!!username); // true (nicht-leerer String ist truthy)
const emptyStr = '';
console.log(!!emptyStr); // false (leerer String ist falsy)
const count = 42;
console.log(!!count); // true
// Entspricht: Boolean(count)
console.log(Boolean(count) === !!count); // true
Schutzabfrage und Toggle-Pattern in der Praxis
// Toggle: Zustand umschalten
let menuOpen = false;
const toggleMenu = () => {
menuOpen = !menuOpen;
console.log('Menü offen:', menuOpen);
};
toggleMenu(); // Menü offen: true
toggleMenu(); // Menü offen: false
// Negation in Kombination mit && – Klammern beachten!
const hasPermission = true;
const isBlocked = false;
if (hasPermission && !isBlocked) {
console.log('Zugriff gewährt.');
}
// Wichtig · Fallstricke
Häufige Fallstricke:
- Leere Arrays und Objekte sind truthy:
![]und!{}ergeben beidefalse, was viele Einsteiger überrascht. Um zu prüfen, ob ein Array leer ist, sollte stattdessenarray.length === 0verwendet werden. - Operatorpriorität:
!hat eine höhere Priorität als==,===,<,>,&&und||. Der Ausdruck!a === bwird als(!a) === bausgewertet, nicht als!(a === b). Im Zweifel immer Klammern setzen. !!vs.Boolean(): Beide Varianten liefern identische Ergebnisse.Boolean(x)ist lesbarer;!!xist kürzer und in der Praxis sehr verbreitet.- TypeScript: In TypeScript wird
!am Ende eines Ausdrucks (z. B.element!) als Non-null Assertion Operator verwendet – dies ist eine TypeScript-spezifische Syntax und hat nichts mit dem logischen NICHT zu tun.