我有两个字符串存储在a
和b
中。如果这两个字符串都有值,我想进行一些验证。为此,我使用以下代码:
if(a && b) {
//Do some processing.
}
然而,如果其中一个为空,而另一个不为空,则需要单独处理。如果两者都为空,则无需采取任何行动。因此,为了处理这种情况,它是XNOR的false情况。
我可以这样做:
if((a && !b) || (!a && b)) {
//handle separately.
}
还有比这更好的方法吗?
我有两个字符串存储在a
和b
中。如果这两个字符串都有值,我想进行一些验证。为此,我使用以下代码:
if(a && b) {
//Do some processing.
}
然而,如果其中一个为空,而另一个不为空,则需要单独处理。如果两者都为空,则无需采取任何行动。因此,为了处理这种情况,它是XNOR的false情况。
我可以这样做:
if((a && !b) || (!a && b)) {
//handle separately.
}
还有比这更好的方法吗?
让我们将你的两个单独的if语句合并为一个(实际上是相同的,但会帮助简化):
if (a && b)
// do some processing
else if (a && !b || !a && b)
// do other processing
a | b | x
--------------
1 | 0 | 1 (a && !b)
0 | 1 | 1 (!a && b)
0 | 0 | 0 (a && b) (negating the first if)
您可以看到当a
为真或b
为真时,正面结果(x
=1)就会出现,这简化为a || b
。您的if语句的最终版本应如下所示:
if (a && b)
// do some processing
else if (a || b)
// do other processing
JavaScript没有XOR和XNOR运算符。有许多实现它们的方法,您实现的方式是可以的。另一种方法是使用三元运算符:
//XOR
if( a ? !b : b ) {
...
}
//XNOR
if( a ? b : !b ) {
...
}
//XOR
if( a != b ) {
...
}
//XNOR
if( a == b ) {
...
}
现在这段代码更加简短,更重要的是,只对a
和b
进行一次求值。然而,这仅适用于a
和b
都是布尔值的情况。如果您想支持其他类型,您需要先将它们转换为布尔值:
//XOR
if( !a != !b ) {
...
}
//XNOR
if( !a == !b ) {
...
}
&&
的运算优先级高于||
:if (a && !b || !a && b) {
- Nina Scholzif
作为第一个else
,就可以简化它:if (a && b) { ... } else if (a || b) { ... }
。 - Cᴏʀʏif(!a != !b)
。 - Jonas Wilms