Start · Sprachen · JavaScript · Referenz · Logisches NICHT (!)

Logisches NICHT (!)

Operator

Der logische NICHT-Operator <code>!</code> kehrt den Wahrheitswert eines Ausdrucks um – aus <code>true</code> wird <code>false</code> und umgekehrt.

seit JavaScript ES1 Kategorie: syntax

Signatur

!expression

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

Typ
boolean
Beschreibung
Gibt 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.');
}
false true 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!)
true true true true true false false false false

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
true false true 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.');
}
Menü offen: true Menü offen: false Zugriff gewährt.

// Wichtig · Fallstricke

Häufige Fallstricke:

  • Leere Arrays und Objekte sind truthy: ![] und !{} ergeben beide false, was viele Einsteiger überrascht. Um zu prüfen, ob ein Array leer ist, sollte stattdessen array.length === 0 verwendet werden.
  • Operatorpriorität: ! hat eine höhere Priorität als ==, ===, <, >, && und ||. Der Ausdruck !a === b wird als (!a) === b ausgewertet, nicht als !(a === b). Im Zweifel immer Klammern setzen.
  • !! vs. Boolean(): Beide Varianten liefern identische Ergebnisse. Boolean(x) ist lesbarer; !!x ist 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.