如何切换布尔值?

548

有没有一种非常简单的方法在Javascript中切换布尔值?

到目前为止,除了编写自定义函数之外,我最好的方法是使用三元运算符:

bool = bool ? false : true;
9个回答

1217
bool = !bool;

这在大多数编程语言中都是正确的。


12
真是个很棒的解决方案,我之前一直在使用:test = (test == true)? false : true; - alpera
18
@user2846569,如果你正在切换布尔值,意味着这个变量已经被初始化了。你可以扩展它为 bool = !bool || true; 来设置一个默认值,我想。 - Jordan
3
引起 ReferenceError 错误。 - user2846569
1
J.B想要一个一元语句而不是二元语句。也许它可以是bool!!或!!bool。但是到目前为止,我从未见过这样的语法。我同意Jordan的看法。它已经很短了。 - Fandi Susanto
1
即使值以 undefined 开头,这个方法也能很好地工作。 - goodhyun
显示剩余5条评论

123

如果你不介意将布尔值转换为数字(即0或1),你可以使用位异或赋值运算符。如下:

bool ^= true;   //- toggle value.
这尤其适用于使用长且描述详细的布尔变量名称,例如:
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)

这对我来说比在每行中重复变量更容易扫描。

这种方法适用于所有(主要的)浏览器(和大多数编程语言)。


22
由于它最终会被转换为整数,因此可以简化为: bool ^= 1 - Kyle Mueller
62
将值转换为数字后,您将无法再执行 bool === falsebool === true。 这可能会破坏现有的代码,请小心。 - aymericbeaumet

16

非常简单而且有用。谢谢! - Sheikh Wahab Mahmood

13
bool = bool != true;

其中一个案例。


5

我在寻找一种切换方法,它可以将初始值为nullundefined的值“切换”为false

这就是代码:

booly = !(booly != false)

2

这是一个老问题,但我认为ES6的更新会很好。

通常我们希望一个切换可以处理一切而不破坏我们的代码。

我们可以使用一个初始值为falsenullundefined值来处理。

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


!(b ?? false)这个表达式是否有点多余,因为它已经被传给了 ! 运算符?nullundefined 本身就是假值,所以可以用 !b 来达到同样的效果。 - Slackow

1
bool === tool ? bool : tool

如果您希望该值在tool(另一个布尔值)具有相同值时保持为真


1

在某些情况下,您可能会将true / false存储为字符串,例如在localStorage中,在2009年协议翻转为多对象存储,然后在2011年又翻转回字符串时 - 您可以使用JSON.parse动态解释为布尔值:

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

如果变量的真/假值不同,例如"Yes"/"No",我会使用 sidebar = (sidebar == trueValue) falseValue : trueValue; - alans

0

我一直喜欢布尔值,但现在为了方便和调试,我使用二进制。你可以使用概念 !key : ++key: --key 来切换,如果你在任何异步函数中或者任何时候出现错误或假的真实情况,这个值将会泄漏出0(零)/ 1(一),然后你可以触发一个警报来进行调试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接