我在a&中存储了两个字符串b.如果两个字符串都有一些值,我想要进行一些验证.为此,我使用:
if(a && b) {
//Do some processing.
}
Run Code Online (Sandbox Code Playgroud)
但是,如果其中一个是空的而另一个不是,那么我需要单独处理它.如果两者都是空的,我不需要做任何事情.所以基本上处理这种情况是XNOR的错误情况.我可以这样做:
if((a && !b) || (!a && b)) {
//handle separately.
}
Run Code Online (Sandbox Code Playgroud)
有比这更好的方法吗?
让我们将你的两个单独的if语句合并为一个(实际上相同,但有助于简化):
if (a && b)
// do some processing
else if (a && !b || !a && b)
// do other processing
Run Code Online (Sandbox Code Playgroud)
为了弄清楚我们是否可以进一步简化,让我们看一下第二个条件的真值表:
a | b | x
--------------
1 | 0 | 1 (a && !b)
0 | 1 | 1 (!a && b)
0 | 0 | 0 (a && b) (negating the first if)
Run Code Online (Sandbox Code Playgroud)
x当a真实或何时b为真时,您可以看到正结果(= 1)存在,这简化为a || b.if语句的最终版本如下所示:
if (a && b)
// do some processing
else if (a || b)
// do other processing
Run Code Online (Sandbox Code Playgroud)
JavaScript没有XOR和XNOR运算符.有很多方法可以实现它们,实现它的方式很好.另一种方法可以是使用三元运算符:
//XOR
if( a ? !b : b ) {
...
}
//XNOR
if( a ? b : !b ) {
...
}
Run Code Online (Sandbox Code Playgroud)
然而,所有这些方法都具有潜在的评估缺点a,并b不止一次.如果a或是b函数或表达式,这可能是一个问题.更好的方法是将XOR的定义重写为:如果两个布尔操作数不具有相同的值,则返回true.我们可以像这样实现:
//XOR
if( a != b ) {
...
}
//XNOR
if( a == b ) {
...
}
Run Code Online (Sandbox Code Playgroud)
现在,这是更短,更重要的是,只有评估a和b一次.但是,如果这两者只能a和b是布尔值.如果你想支持其他类型,你必须先将它们转换为布尔值:
//XOR
if( !a != !b ) {
...
}
//XNOR
if( !a == !b ) {
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |