Comment basculer un booléen?

413

Existe-t-il un moyen très simple de basculer une valeur booléenne en javascript ?

Jusqu'à présent, le meilleur que j'ai obtenu en dehors de l'écriture d'une fonction personnalisée est le ternaire:

bool = bool ? false : true;
Chris Dutrow
la source

Réponses:

927
bool = !bool;

Cela est vrai dans la plupart des langues.

Jordan
la source
8
solution vraiment sympa, j'utilisais: test = (test == true)? faux vrai;
alpera
1
Cela nécessite une initialisation, il existe donc un moyen sans initialisation. Bien que cela fonctionnerait sur les attributs d'objet.
user2846569
10
@ user2846569, si vous basculez le booléen, cela signifie que par nature la variable a déjà été initialisée. Vous pouvez l'étendre bool = !bool || true;pour avoir une valeur par défaut, je suppose.
Jordan
3
@Jordan That causes ReferenceError
user2846569
1
JB veut une instruction unaire plutôt qu'une instruction binaire. Peut-être que ça pourrait être boolé !! ou !! bool. Mais jusqu'à présent, je n'ai jamais vu une telle syntaxe. Je suis d'accord avec Jordan. C'est déjà si court.
Fandi Susanto
95

Si cela ne vous dérange pas que le booléen soit converti en nombre (c'est-à-dire 0 ou 1), vous pouvez utiliser l'opérateur d'assignation XOR au niveau du bit . Ainsi:

bool ^= true;   //- toggle value.


C'est particulièrement bon si vous utilisez des noms booléens longs et descriptifs, par exemple:

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)

C'est plus facile pour moi de scanner que de répéter la variable dans chaque ligne.

Cette méthode fonctionne dans tous les navigateurs (principaux) (et la plupart des langages de programmation).

Brock Adams
la source
15
Comme cela se transforme en un entier de toute façon, cela peut être simplifié comme suit:bool ^= 1
Kyle Mueller
47
Comme la valeur est convertie en un nombre, vous ne pourrez plus faire bool === falseou bool === trueplus. Cela pourrait casser le code existant, alors soyez prudent.
aymericbeaumet
12
bool = bool != true;

Un des cas.

Feeco
la source
2
bool === tool ? bool : tool

si vous voulez que la valeur toolreste vraie si (un autre booléen) a la même valeur

Ardhi
la source
2

Je cherchais une méthode de basculement qui fait de même, sauf pour une valeur initiale de nullou undefined, où elle devrait devenir false.

C'est ici:

booly = !(booly != false)
Hé Jude
la source