反转布尔表达式

时间:2014-10-15 17:38:26

标签: javascript language-agnostic boolean-expression

我有一些像这样的代码

var a = returnsABoolean();
var b = returnsABoolean();

if (!a || !b) {

} else {
  doStuff();
}

如何在if语句中反转测试,以便我可以将其重写为

var a = returnsABoolean();
var b = returnsABoolean();

if (someExpression) {
  doStuff();
}

换句话说,我应该用什么测试替换someExpression以保留现有的行为?

3 个答案:

答案 0 :(得分:6)

您需要应用De Morgan定理。哪个州:

!A || !B == !(A && B)

因此,您的测试可以重写为:

if (a && b) {
    doStuff();
}

为什么会这样?

基本上,应用De Morgan定理,您首先要将语句重写为:

if ( ! (a && b) ) {

} else {
    doStuff();
}

由于我们现在要反转!(a&&b),我们只需删除

if ( (a && b) ) {
    doStuff();
}

答案 1 :(得分:0)

De Morgan的法律规定您可以将!a || !b重写为!(a&&b)

这也是另一种方式:!a && !b可以重写为!(a||b)

答案 2 :(得分:0)

只需将条件的逻辑反转分配给之前的范围"否则"言。

if( a && b ) { 
    doStuff();
     }
相关问题