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;

Odpowiedzi:


926
bool = !bool;

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


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).


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



2
bool === tool ? bool : tool

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


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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.