Javascript “一班轮”退货;如果其中任何一项为真,则返回“假”;
如果有一个函数检查4个条件(例如Javascript “一班轮”退货;如果其中任何一项为真,则返回“假”;,javascript,boolean-logic,Javascript,Boolean Logic,如果有一个函数检查4个条件(例如a、B、C和D),如果其中任何一个条件为true,则函数应返回false 如果你这样写的话,它是有效的: function is () { return ( !A && !B && !C && !D ) } 但是,在这种情况下(如果我错了,请纠正我)每次都会检查(而如果A为true则足以停止并返回false 您可以简单地反转函数的功能并使用return(A | | | B | | |
a
、B
、C
和D
),如果其中任何一个条件为true
,则函数应返回false
如果你这样写的话,它是有效的:
function is () {
return (
!A && !B && !C && !D
)
}
但是,在这种情况下(如果我错了,请纠正我)每次都会检查(而如果A
为true
则足以停止并返回false
您可以简单地反转函数的功能并使用return(A | | | B | | | C | | D)
,但是如果您希望它保持这样,该怎么办呢
i、 例如,我要寻找的是一个单行返回
,它相当于:
if (a) return false;
if (b) return false;
if (c) return false;
if (d) return false;
return true;
编辑:
正如回答和评论中指出的,假设在第一个示例中,每次都会检查所有条件是错误的。一旦其中一个条件的计算结果为
false
(这意味着A
,B
,C
,D
中至少有一个条件为true,即“not true”)它将停止并返回false
您在这方面错了:
然而,在这种情况下(如果我错了,请纠正我)-所有
每次都将检查条件(对于
示例A为true时停止并返回false
在&&
的情况下,只要有一个术语为false,表达式就会被计算为false
以下是一份:
短路评估
当逻辑表达式从左到右求值时,将对其进行测试
使用以下规则进行可能的“短路”评估:
和&任何短路都被评估为false
false
| | 任何短路都被评估为true
true
return !(A || B || C || D)
仍然应该进行短路评估,这样就不会有显著的性能改进,但表达式对某些人来说可能更清晰。在我看来,这更像是一个品味问题。你对它的工作原理有错误。像&&和| | shortcircuit这样的布尔运算符;一旦整个表达式具有已知值,它们就会停止测试。因此我在提供的代码中,如果
A
为true
,则!A
为false
,并且false&&无法检查它们。例如:
var resultarray = ...;
if (resultarray.some(Boolean)) {
}
或者模拟你的情况,你正在测试所有这些都是虚假的:
var resultarray = ...;
if (!resultarray.some(Boolean)) {
}
这两个选项都会在找到一个真实值时立即短路。类似地,可以用于测试所有条目是否满足条件,而不是至少满足一个条件,并且在找到至少一个虚假值时短路。返回!(a | | B | | C | D)
将是最直接的短路版本。不知道你为什么不想要它。你不能既吃蛋糕又吃蛋糕,也就是说,你不能让它“保持这样”你的第一段代码与你所说的完全一样。@deceze为什么不呢?a&&!b不是也短路一行吗?@le_m当然,这也是一样的。我选择“不是a或b或C…”是因为它表达了更好的意图,但它们最终的效果是一样的。