Wie schalte ich einen Booleschen Wert um?

412

Gibt es eine wirklich einfache Möglichkeit, einen booleschen Wert in Javascript umzuschalten ?

Bisher ist das Beste, was ich außerhalb des Schreibens einer benutzerdefinierten Funktion habe, das Ternäre:

bool = bool ? false : true;
Chris Dutrow
quelle

Antworten:

926
bool = !bool;

Dies gilt in den meisten Sprachen.

Jordan
quelle
8
wirklich schöne Lösung, ich habe verwendet: test = (test == true)? Falsch Richtig;
Alpera
1
Dies muss initialisiert werden, es gibt also einen Weg ohne Initialisierung. Dies würde jedoch bei Objektattributen funktionieren.
user2846569
10
@ user2846569 Wenn Sie den Booleschen Wert umschalten, bedeutet dies, dass die Variable von Natur aus bereits initialisiert wurde. Sie könnten es erweitern bool = !bool || true;, um einen Standard zu haben, nehme ich an.
Jordanien
3
@ Jordan, der ReferenceError verursacht
user2846569
1
JB möchte eher eine unäre als eine binäre Anweisung. Vielleicht könnte es bool sein !! oder !! bool. Aber bisher habe ich noch nie eine solche Syntax gesehen. Ich stimme Jordan zu. Es ist schon so kurz.
Fandi Susanto
95

Wenn es Ihnen nichts ausmacht, dass der Boolesche Wert in eine Zahl konvertiert wird (entweder 0 oder 1), können Sie den Bitwise XOR Assignment Operator verwenden . Wie so:

bool ^= true;   //- toggle value.


Dies ist besonders gut, wenn Sie lange, beschreibende boolesche Namen verwenden, z.

var inDynamicEditMode   = true;     // Value is: true (boolean)
inDynamicEditMode      ^= true;     // Value is: 0 (number)
inDynamicEditMode      ^= true;     // Value is: 1 (number)
inDynamicEditMode      ^= true;     // Value is: 0 (number)

Dies ist für mich einfacher zu scannen als die Variable in jeder Zeile zu wiederholen.

Diese Methode funktioniert in allen (Haupt-) Browsern (und den meisten Programmiersprachen).

Brock Adams
quelle
15
Da dies ohnehin zu einer ganzen Zahl umformuliert wird, kann es vereinfacht werden als:bool ^= 1
Kyle Mueller
47
Da der Wert auf eine Zahl gegossen wird, werden Sie nicht in der Lage sein zu tun , bool === falseoder bool === truemehr. Möglicherweise wird vorhandener Code beschädigt. Seien Sie also vorsichtig.
Aymericbeaumet
12
bool = bool != true;

Einer der Fälle.

Feeco
quelle
2
bool === tool ? bool : tool

Wenn Sie möchten, dass der Wert true ist, wenn tool(ein anderer Boolescher Wert) denselben Wert hat

Ardhi
quelle
2

Ich suchte nach einer Umschaltmethode, die dasselbe tut, mit Ausnahme eines Anfangswertes von nulloder undefined, wo es werden sollte false.

Hier ist es:

booly = !(booly != false)
HeyJude
quelle