Як перемикати булевий?


412

Чи є дійсно простий спосіб переключити булеве значення в JavaScript ?

Поки що найкраще, що я маю поза написанням спеціальної функції, - це потрійний:

bool = bool ? false : true;

Відповіді:


926
bool = !bool;

Це справедливо для більшості мов.


8
дійсно приємне рішення, я використовував: test = (test == true)? хибно: правда;
alpera

1
Для цього потрібна ініціалізація, тому існує спосіб без ініціалізації. Хоча це буде працювати на об'єктні атрибути.
користувач2846569

10
@ user2846569, якщо ви перемикаєте булеву функцію, це означає, що за характером змінна вже ініціалізована. Ви можете розширити його, щоб bool = !bool || true;мати типовий стандарт.
Йорданія

3
@Jordan Це спричиняє ReferenceError
user2846569

1
JB хоче одинарне твердження, а не двійкове твердження. Можливо, це може бути бул !! або !! bool. Але поки що я ніколи не бачив такого синтаксису. Я згоден з Йорданом. Це вже так коротко.
Фанді Сусанто

95

Якщо ви не заперечуєте, щоб булева конверсія була перетворена в число (тобто 0 або 1), ви можете скористатися оператором призначення бітового XOR . Так:

bool ^= true;   //- toggle value.


Це особливо добре, якщо ви використовуєте довгі описові булеві імена, EG:

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(інший булевий) має те саме значення


2

Я шукав метод перемикання, який робить те саме, за винятком початкової величини nullабо undefined, де він повинен стати false.

Ось:

booly = !(booly != false)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.