Jak przełączać wartość logiczną?

412

Czy istnieje naprawdę łatwy sposób przełączania wartości boolowskiej w javascript ?

Do tej pory najlepsze, co mam poza pisaniem funkcji niestandardowej, to trójka:

bool = bool ? false : true;
Chris Dutrow
źródło

Odpowiedzi:

926
bool = !bool;

Dotyczy to większości języków.

Jordania
źródło
8
naprawdę fajne rozwiązanie, używałem: test = (test == true)? fałsz PRAWDA;
alpera
1
Wymaga to inicjalizacji, więc istnieje sposób bez inicjalizacji. Chociaż działałoby to na atrybutach obiektów.
user2846569
10
@ user2846569, jeśli przełączasz wartość logiczną, oznacza to, że z natury zmienna została już zainicjowana. bool = !bool || true;Przypuszczam, że można go rozwinąć, aby mieć wartość domyślną.
Jordania
3
@Jordan Powoduje błąd ReferenceError
user2846569
1
JB chce instrukcji jednoargumentowej, a nie binarnej. Może to może być bool !! lub !! bool. Ale do tej pory nigdy nie widziałem takiej składni. Zgadzam się z Jordanią. Jest już tak krótki.
Fandi Susanto
95

Jeśli nie przeszkadza ci konwersja wartości logicznej na liczbę (czyli 0 lub 1), możesz użyć Bitowego operatora przypisania XOR . Tak jak:

bool ^= true;   //- toggle value.


Jest to szczególnie dobre, jeśli używasz długich, opisowych nazw boolowskich, np .:

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)

To jest dla mnie łatwiejsze do skanowania niż powtarzanie zmiennej w każdej linii.

Ta metoda działa we wszystkich (głównych) przeglądarkach (i większości języków programowania).

Brock Adams
źródło
15
Ponieważ i tak przekształca się na liczbę całkowitą, można to uprościć:bool ^= 1
Kyle Mueller
47
Ponieważ wartość jest rzutowana na liczbę, nie będziesz w stanie tego zrobić bool === falseani bool === truewięcej. Może to uszkodzić istniejący kod, więc bądź ostrożny.
aymericbeaumet
12
bool = bool != true;

Jeden z przypadków.

Feeco
źródło
2
bool === tool ? bool : tool

jeśli chcesz, aby wartość była prawdziwa, jeśli tool(inny boolean) ma tę samą wartość

Ardhi
źródło
2

Szukałem metody przełączania, która robi to samo, z wyjątkiem początkowej wartości nulllub undefined, gdzie powinna się ona stać false.

Oto on:

booly = !(booly != false)
Hej, Jude
źródło