Como alternar um booleano?

412

Existe uma maneira realmente fácil de alternar um valor booleano em javascript ?

Até agora, o melhor que tenho além de escrever uma função personalizada é o ternário:

bool = bool ? false : true;
Chris Dutrow
fonte

Respostas:

926
bool = !bool;

Isso vale na maioria dos idiomas.

Jordânia
fonte
8
solução muito boa, eu estava usando: test = (test == true)? falso verdadeiro;
Alpera
1
Isso precisa de inicialização, então existe um caminho sem inicialização. Embora isso funcione nos atributos do objeto.
User2846569
10
@ user2846569, se você estiver alternando o booleano, isso significa que, por natureza, a variável já foi inicializada. Você poderia expandi-lo para bool = !bool || true;ter um padrão, suponho.
Jordan
3
@Jordan Isso causa o ReferenceError
user2846569
1
JB quer uma declaração unária ao invés de binária. Talvez possa ser booleano !! ou !! bool. Mas até agora eu nunca vi essa sintaxe. Eu concordo com a Jordan. Já é tão curto.
Fandi Susanto
95

Se você não se importa que o booleano seja convertido em um número (que é 0 ou 1), você pode usar o Operador de atribuição Bitwise XOR . Igual a:

bool ^= true;   //- toggle value.


Isso é especialmente bom se você usar nomes booleanos longos e descritivos, EG:

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)

Isso é mais fácil para mim do que repetir a variável em cada linha.

Este método funciona em todos os navegadores (principais) (e na maioria das linguagens de programação).

Brock Adams
fonte
15
Desde essa reformulação para um qualquer maneira inteiro, ele pode ser simplificada como:bool ^= 1
Kyle Mueller
47
Como o valor é fundido a um número, você não será capaz de fazer bool === falseou bool === truemais. Pode quebrar o código existente, portanto, tenha cuidado.
aymericbeaumet
12
bool = bool != true;

Um dos casos

Feeco
fonte
2
bool === tool ? bool : tool

se você deseja que o valor seja verdadeiro se tool(outro booleano) tiver o mesmo valor

Ardhi
fonte
2

Eu estava procurando por um método de alternância que faça o mesmo, exceto por um valor inicial de nullou undefined, onde ele deve se tornar false.

Aqui está:

booly = !(booly != false)
HeyJude
fonte