Javascript “一班轮”退货;如果其中任何一项为真,则返回“假”;

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 | | |

如果有一个函数检查4个条件(例如
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…”是因为它表达了更好的意图,但它们最终的效果是一样的。