如何切换布尔值?


412

有没有一种真正简单的方法来切换javascript中的布尔值?

到目前为止,在编写自定义函数之外,我得到的最好的结果是三元:

bool = bool ? false : true;

Answers:


926
bool = !bool;

在大多数语言中都适用。


8
真的很好的解决方案,我正在使用:测试=(测试==真)?假:真;
alpera 2014年

1
需要初始化,因此有没有初始化的方法。虽然这将适用于对象属性。
user2846569 2014年

10
@ user2846569,如果要切换布尔值,则意味着该变量已被初始化。bool = !bool || true;我想,您可以将其扩展为默认值。
约旦

3
@Jordan导致ReferenceError
2014年

1
JB希望使用一元语句而不是二进制语句。也许是布尔!或!!布尔。但是到目前为止,我还从未见过这样的语法。我同意约旦。它已经很短了。
Fandi Susanto 2014年

95

如果您不介意将布尔值转换为数字(即0或1),则可以使用按位XOR赋值运算符。像这样:

bool ^= true;   //- toggle value.


如果您使用长的描述性布尔名称E​​G,则特别好:

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 === falsebool === true不再。它可能会破坏现有代码,所以要小心。
aymericbeaumet 2014年



2
bool === tool ? bool : tool

如果您希望值在tool另一个布尔值相同的情况下保持true


2

我正在寻找一种执行相同操作的切换方法,但初始值nullundefined应当变为false

这里是:

booly = !(booly != false)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.