JavaScript: Doppelte Negation für Boolean-Typecast
In diesem Beitrag zeige ich euch, was es in JavaScript mit der doppelten Anwendung des Not-Operators ! auf sich hat bzw. wofür man diese doppelte Negation eigentlich verwenden kann.
Im Allgemeinen, so wie ich es bisher am häufigsten gesehen habe, wird es häufig als Kurzschreibweise eingesetzt, um zu überprüfen, ob eine Variable ungleich vom Typ undefined oder null ist.
Einfache Negation
Der Not-Operator macht letztendlich nichts anderes als einen Wert in einen Boolean-Datentyp zu konvertieren, der dem Gegenteil des logischen Werts unseres eigentlichen Werts entspricht.
Ein paar Zeilen Code verdeutlichen dieses vielleicht etwas besser:
var numVal = 1;
var strVal = 'Eins';
var boolVal = true;
// gibt 'false' aus
console.log(!numVal)
// gibt 'false' aus
console.log(!strVal)
// gibt 'false' aus
console.log(!boolVal) Dabei gibt der Not-Operator in den folgenden Fällen immer true zurück:
- 0
- "" (leerer String)
- undefined
- null
- NaN
- false
Das können wir uns natürlich zu Nutze machen und doppelt negieren.
Doppelte Negation
Wenn wir also sicherstellen wollen, dass eine Variable einen Wert enthält, der zu einem boolschen true (logisches Wahr) konvertiert werden kann, dann brauchen wir nur den Not-Operator doppelt auf die Variable anwenden:
// undefined
var testVal;
if(!!testVal)
{
console.log('Die Variable enthält einen Wert, der logisch wahr ist!')
} In unserem Beispiel würde der if-Block nicht ausgeführt werden, weil die Variable testVal vom Typ undefined ist und die doppelte Negation false zurückliefert.
Diese doppelte Negation konvertiert unseren Wert also einfach nur in einen Boolean-Datentyp, so als ob wir direkt Boolean() anwenden würden:
var testVal;
// gibt 'true' aus
console.log(!!testVal === Boolean(testVal));Fazit
Mit der doppelten Negation bzw. der doppelten Anwendung des Not-Operators ! (im englischsprachigen teilweise auch als "Double Negation Trick" bezeichnet) haben wir eine Kurzschreibweise zu Hand mit der wir einen Wert in den Datentyp Boolean konvertieren können.
- 29. Juni 2012
ursprüngliche Veröffentlichung in meinem ehemaligen Blog "Smart-Webentwicklung"