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;

Réponses:


927
bool = !bool;

Cela est vrai dans la plupart des langues.


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


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



2
bool === tool ? bool : tool

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


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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.