# 2 Ways to Convert Values to Boolean in JavaScript

Mein Favorit ist die Verwendung von !!. Es ist auch die empfohlene Methode im JavaScript-Style-Guide von Airbnb 👍

Boolean(value);!!value;

# Werte in Boolean umwandeln

# String

const string = 'string';!!string; // trueBoolean(string); // true

# Zahl

const number = 100;!!number; // trueBoolean(number); // true

# Falsy Values

In JavaScript, gibt es 6 Falsy-Werte. Wenn Sie einen dieser Werte in ein boolean umwandeln, wird false zurückgegeben.

falseundefinednullNaN0"" (empty string)

Alles, was nicht in der Falsy-Liste steht, gibt true 👍

Mehr Informationen dazu, können Sie in meinen Codehinweisen zu Falsy-Werten nachlesen

# Beispiele

Anwendung von !! auf Falsy-Werte

!!false; // false!!undefined; // false!!null; // false!!NaN; // false!!0; // false!!''; // false

Anwendung von Boolean auf Falsy-Werte

Boolean(false); // falseBoolean(undefined); // falseBoolean(null); // falseBoolean(NaN); // falseBoolean(0); // falseBoolean(''); // false

# Wie das !! funktioniert

Das erste ! zwingt den Wert in einen booleschen und invertiert ihn. In diesem Fall wird !valuefalse zurückgeben. Um es also wieder auf true umzukehren, setzen wir ein weiteres ! darauf. Daher die doppelte Verwendung von !!.

const value = 'string';!value; // false!!value; // true

# Achten Sie auf ‚false‘

const value = 'false';!!value; // trueBoolean(value); // true

Beachten Sie, dass das "false" zwischen Anführungszeichen ' steht. Obwohl es false heißt, ist es eigentlich ein String. Ich weiß, dass die meisten von Ihnen nicht darauf reinfallen werden, aber wenn Sie wie ich sind, sollten Sie auf diese lustigen Gedankentricks achten, die die Leute mit Ihnen spielen 😂

# Community Input

@tassoevan : Ich genieße es, falsche Werte aus Arrays wie diesem zu filtern: myArray.filter(Boolean)

@fleonus : Ich mag !+!, nur um cool zu sein und die Leute zu verwirren 😛

# Geschwindigkeitstest

Hier ist ein Test, den ich gefunden habe:

boolean vs !!!

Sieht so aus, als ob das !! ein bisschen schneller ist als Boolean

# Welches soll man benutzen?

Ich habe eine Menge Kommentare zu diesem Beitrag bekommen. Einige Leute bevorzugen das Boolean, weil es expliziter ist.

Aber, Kyle Simpson von You Don’t Know JS, erwähnte, dass beide explizit sind.

// better (works explicitly):if (!!a) {}// also great (works explicitly):if (Boolean(a)) {}

Kyle Simpson: YDKJS – Coercion

Ich glaube nicht, dass ich eine gute Antwort für Sie habe. Sie werden Ihr Team viel besser kennen, als ich es tue. Ich werde weiterhin !! in meinen persönlichen Projekten verwenden, weil es weniger Tipparbeit ist und ich diese Syntax verstehe. Aber wenn ich in einem Team wäre, würde ich vielleicht Boolean wählen, weil ich denke, dass die meisten Entwickler das besser verstehen würden. Egal, welche Sie wählen, das Wichtigste ist, dass Sie konsistent sind. Wechseln Sie nicht zwischen den beiden in Ihrer Codebasis hin und her. Wählen Sie eine und bleiben Sie dabei 💪

Zu einem tollen Kommentar, den ich bekommen habe:

@patrick_developer: Ich sage, man sollte beides verstehen, gerade für den Fall, dass man mit verschiedenen Codebasen konfrontiert wird, die beide verwenden. Wissen ist Macht.

In anderen Worten, das eine ist nicht besser als das andere. Das eine ist eher eine Vorliebe, würde ich sagen. Sie können also nichts falsch machen. Aber berauben Sie sich nicht selbst des Verständnisses für beides. Wie Patrick sagte: „Wissen ist Macht“ 💪

# Vermeiden Sie new Boolean

Verwenden Sie Primitive statt Objekttypen

var str = 'str';// Avoidtypeof new Boolean(str); // object// Preferredtypeof Boolean(str); // booleantypeof !!str; // boolean

CJ J.: Es ist erwähnenswert, dass new Boolean kein Boolean ist, sondern eher eine Instanz von Boolean. Primitive sind billiger und sollten gegenüber dem Objekttyp bevorzugt werden.

CJ J.: new Boolean(str) gibt einen Objekttyp zurück. Boolean(str) gibt nur einen primitiven booleschen Wert zurück. Ich würde vermuten, dass Boolean(str) schneller ist als !!str, weil es nur eine Operation ist, aber es ist auch durchaus möglich, dass die Browser eine Optimierung implementieren, so dass sie, wenn sie !! sehen, wissen, dass sie das Argument direkt in ein boolesches Primitiv umwandeln müssen (anstatt NOT() zweimal hintereinander zu machen).

CJ J.: Primitive sind billig, weil sie unveränderlich sind, so dass Sie Referenzen gemeinsam nutzen können und keinen Zustand auf der Instanz halten müssen. Es ist einfach true oder false. Aber new Boolean(str) ist ein Objekt. Es hat seine eigene, eindeutige Speicheradresse und kann einen internen Zustand halten, der für es einzigartig ist. Das bedeutet, dass es nicht nur eine Referenz auf eine unveränderliche Singleton-Instanz halten kann. Jeder Aufruf von new Boolean(str) instantiiert ein ganz neues Boolean() Objekt.

Danke: CJ J.

# Leere Strings mit Booleschem Konstruktor entfernen

CJ J.: Das ist das klassische Beispiel. Wenn Sie eine Liste von String-Werten erhalten, die durch Kommas getrennt sind, und Sie die leeren Strings herausfiltern wollen, können Sie die Boolesche Konstruktorfunktion an Array.prototype.filter übergeben, und sie wird automatisch die Strings mit der Länge Null entfernen und ein Array mit nur gültigen Strings hinterlassen.

var str = 'some,list,,of,values';var arr = str.split(',');arr; // arr.filter(Boolean); // 

Danke: CJ J .

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.