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


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, если (другое логическое значение) имеет то же значение


2

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

Вот:

booly = !(booly != false)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.