¿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;

Respuestas:


926
bool = !bool;

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


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


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



2
bool === tool ? bool : tool

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


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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.