¿Cómo alternar un booleano?

412

¿Hay una manera realmente fácil de alternar un valor booleano en javascript ?

Hasta ahora, lo mejor que tengo fuera de escribir una función personalizada es el ternario:

bool = bool ? false : true;
Chris Dutrow
fuente

Respuestas:

926
bool = !bool;

Esto es cierto en la mayoría de los idiomas.

Jordán
fuente
8
muy buena solución, estaba usando: test = (test == true)? falso verdadero;
alpera
1
Esto necesita inicialización, entonces hay una manera sin inicialización. Aunque esto funcionaría en los atributos del objeto.
user2846569
10
@ user2846569, si está alternando el valor booleano, eso significa que, por naturaleza, la variable ya se ha inicializado. Podrías expandirlo bool = !bool || true;para tener un valor predeterminado, supongo.
Jordania
3
@Jordan que causa el error de referencia
usuario2846569
1
JB quiere una declaración unaria en lugar de una declaración binaria. Quizás podría ser bool !! o !! bool. Pero hasta ahora nunca he visto tal sintaxis. Estoy de acuerdo con Jordan Ya es muy corto.
Fandi Susanto
95

Si no le importa que el booleano se convierta en un número (que es 0 o 1), puede usar el Operador de asignación XOR de Bitwise . Al igual que:

bool ^= true;   //- toggle value.


Esto es especialmente bueno si usa nombres booleanos largos y descriptivos, por ejemplo:

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)

Es más fácil para mí escanear que repetir la variable en cada línea.

Este método funciona en todos los navegadores (principales) (y en la mayoría de los lenguajes de programación).

Brock Adams
fuente
15
Dado que esto se convierte en un número entero de todos modos, se puede simplificar como:bool ^= 1
Kyle Mueller
47
Como el valor se convierte en un número, no podrá hacerlo bool === falseni bool === truemás. Puede romper el código existente, así que tenga cuidado.
aymericbeaumet
12
bool = bool != true;

Uno de los casos.

Feeco
fuente
2
bool === tool ? bool : tool

si desea que el valor sea verdadero si tool(otro booleano) tiene el mismo valor

Ardhi
fuente
2

Estaba buscando un método de alternancia que haga lo mismo, excepto por un valor inicial de nullo undefined, donde debería convertirsefalse .

Aquí está:

booly = !(booly != false)
Hola judeo
fuente