Javascript 反转布尔表达式
我有一些这样的代码Javascript 反转布尔表达式,javascript,language-agnostic,boolean-expression,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(); } 换句话说,我应该用什么测试来替换某个表达式来保留现有的行为
var a = returnsABoolean();
var b = returnsABoolean();
if (!a || !b) {
} else {
doStuff();
}
如何在if语句中反转测试,以便将其重写为
var a = returnsABoolean();
var b = returnsABoolean();
if (someExpression) {
doStuff();
}
换句话说,我应该用什么测试来替换某个表达式来保留现有的行为?德摩根定律规定你可以重写
!a | | |!b作为!(a和b)
这也是另一种方式:!a&&!b
可以重写为!(a | | b)
你需要应用德摩根定理。其中指出:
!A || !B == !(A && B)
因此,您的测试可以重新编写为:
if (a && b) {
doStuff();
}
它为什么有效?
基本上,应用De Morgan定理,首先将您的陈述改写为:
if ( ! (a && b) ) {
} else {
doStuff();
}
因为我们现在想要反转!(a和b)
我们只是删除而不是:
if ( (a && b) ) {
doStuff();
}
只需将条件的逻辑逆赋值给上一个作用域的“else”语句
if( a && b ) {
doStuff();
}
该页面似乎描述了如何重写表达式,而不是如何反转one@Georgio:一旦将表达式设置为!(a和b)
显然,相反的做法是简单地删除代码>?@Georgio:那是一样的。但我想得到表达式的倒数,而不是重写它。是的,所以要反转,你只需要从重写中删除倒数,而不是!(a&&b)
,这只是(a&&b)
这个答案是正确的,所以我不知道为什么它被否决了。