Chris Dutrow
Chris Dutrow

Reputation: 50362

How to toggle a boolean?

Is there a really easy way to toggle a boolean value in javascript?

So far, the best I've got outside of writing a custom function is the ternary:

bool = bool ? false : true;

Upvotes: 562

Views: 464140

Answers (10)

Lenny Woods
Lenny Woods

Reputation: 361

perform a NOT operation on the bool

bool = !bool;

Upvotes: 0

Teocci
Teocci

Reputation: 8885

This is an old question but I think a ES6 update will be good.

Usually we want a toggle that can handle everything without breaking our code.

We can use an initial value for null or undefined values as false.

const boolToggler = b => !(b ?? false)

let foo
console.log('foo:', foo) // undefined

foo = boolToggler(foo)
console.log('foo:', foo) // true (assumes undefined as 'false')

foo = boolToggler(foo)
console.log('foo:', foo); // false

let fee = null
console.log('fee:', fee) // null

fee = boolToggler(fee)
console.log('fee:', fee) // true (assumes null as 'false')

let faa = true
console.log('faa:', faa) // true

faa = boolToggler(faa)
console.log('faa:', faa); // false

Upvotes: 2

user17386646
user17386646

Reputation:

I always liked Boolean value, but nowadays I'm using binary for both convenience and debugging. You can use de consept !key : ++key: --key to toggle, and if you are in any asynchronous function or anytime an error or false true occurs, the value will leak out of 0(zero)/ 1(one) and you can trigger an alert to debug later.

Upvotes: 0

Brock Adams
Brock Adams

Reputation: 93483

If you don't mind the boolean being converted to a number (that is either 0 or 1), you can use the Bitwise XOR Assignment Operator. Like so:

bool ^= true;   //- toggle value.

This is especially good if you use long, descriptive boolean names, EG:
let inDynamicEditMode   = true;     // Value is: true (boolean)
inDynamicEditMode      ^= true;     // Value is: 0 (number)
inDynamicEditMode      ^= true;     // Value is: 1 (number)
inDynamicEditMode      ^= true;     // Value is: 0 (number)

This is easier for me to scan than repeating the variable in each line.

This method works in all (major) browsers (and most programming languages).

Upvotes: 124

OfirD
OfirD

Reputation: 10460

I was searching after a toggling method that does the same, but which "toggles" an initial value of null or undefined to false.

Here it is:

booly = !(booly != false)

Upvotes: 5

Grant
Grant

Reputation: 6329

In a case where you may be storing true / false as strings, such as in localStorage where the protocol flipped to multi object storage in 2009 & then flipped back to string only in 2011 - you can use JSON.parse to interpret to boolean on the fly:

this.sidebar = !JSON.parse(this.sidebar);

Upvotes: 1

Jordan
Jordan

Reputation: 32522

bool = !bool;

This holds true in most languages.

Upvotes: 1247

Xameer
Xameer

Reputation: 31237

Let's see this in action:

var b = true;

console.log(b); // true

b = !b;
console.log(b); // false

b = !b;
console.log(b); // true

Anyways, there is no shorter way than what you currently have.

Upvotes: 19

Ardhi
Ardhi

Reputation: 3035

bool === tool ? bool : tool

if you want the value to hold true if tool (another boolean) has the same value

Upvotes: 1

Boaris
Boaris

Reputation: 5226

bool = bool != true;

One of the cases.

Upvotes: 13

Related Questions