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;

Respostas:


926
bool = !bool;

Isso vale na maioria dos idiomas.


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


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



2
bool === tool ? bool : tool

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


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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.