Как переключить логическое значение?

413

Есть ли действительно простой способ переключить логическое значение в JavaScript ?

Пока что лучшее, что у меня есть за пределами написания пользовательской функции - это троица:

bool = bool ? false : true;
Крис Датроу
источник

Ответы:

927
bool = !bool;

Это верно в большинстве языков.

Иордания
источник
8
действительно хорошее решение, я использовал: test = (test == true)? ложь Правда;
Alpera
1
Это требует инициализации, поэтому есть способ без инициализации. Хотя это будет работать с атрибутами объекта.
user2846569
10
@ user2846569, если вы переключаете логическое значение, это означает, что по своей природе переменная уже инициализирована. Вы могли бы расширить его, чтобы bool = !bool || true;иметь значение по умолчанию, я полагаю.
Иордания
3
@Jordan Это вызывает ReferenceError
user2846569
1
JB хочет унарный оператор, а не бинарный оператор. Возможно, это может быть бул! или !! бул. Но до сих пор я никогда не видел такой синтаксис. Я согласен с Джорданом. Это уже так коротко.
Fandi Susanto
95

Если вы не возражаете против преобразования логического числа в число (то есть 0 или 1), вы можете использовать оператор побитового присваивания XOR . Вот так:

bool ^= true;   //- toggle value.


Это особенно хорошо, если вы используете длинные описательные логические имена, например:

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)

Это легче для меня, чем повторять переменную в каждой строке.

Этот метод работает во всех (основных) браузерах (и большинстве языков программирования).

Брок Адамс
источник
15
Так как это в любом случае преобразуется в целое число, его можно упростить как:bool ^= 1
Кайл Мюллер,
47
Поскольку значение приведено к числу, вы не сможете этого сделать bool === falseили bool === trueбольше. Это может сломать существующий код, поэтому будьте осторожны.
aymericbeaumet
2
bool === tool ? bool : tool

если вы хотите, чтобы значение toolимело значение true, если (другое логическое значение) имеет то же значение

Ardhi
источник
2

Я искал метод переключения, который делает то же самое, за исключением начальной стоимости nullили undefined, где он должен стать false.

Вот:

booly = !(booly != false)
HeyJude
источник