多个javascript条件

多个javascript条件,javascript,Javascript,我在javascript中设置了一个条件,如果a值或b值大于59和c1,c2,c3,c4任何一个大于21,我的条件都将为真。它工作正常,但当我输入a值50b值30和c1值25时,它将进入else语句 代码如下: if((a > 59) || (b > 59) && (c1 > 21) && (c2 > 21) && (c3 > 21) && (c4 > 21)){ total =

我在javascript中设置了一个条件,如果
a值
b值
大于
59
c1
c2
c3
c4
任何一个大于
21
,我的条件都将为真。它工作正常,但当我输入
a值50
b值30
c1值25
时,它将进入else语句

代码如下:

if((a > 59) || (b > 59) &&  (c1 > 21) &&  (c2 > 21) &&  (c3 > 21) &&  (c4 > 21)){
    total = a + b + c1 + c2 + c3 + c4;
}
    else {

    }
你能帮我解决一下如何满足我的条件吗?

根据你的评论


@邪恶的羊,我在做这样的陈述,像a或b应该大于59,c1,c2,c3或c4应该大于21,这将是一个真实的陈述

这就是你真正想要的:

(a > 59 || b > 59) && (c1 > 21 || c2 > 21 || c3 > 21 || c4 > 21)
这就是它的工作原理:

  • (a>59 | b>59)
    检查ab是否大于59
  • (c1>21 | | c2>21 | | c3>21 | | c4>21)
    如果其中一个大于21,则为真
  • &&
    运算符检查两个表达式是否都为true,只有在这种情况下,它才会返回
    true
设a=60,b=30,c1=30;

控制台日志((a>59 | b>59)和&(c1>21 | c2>21 | c3>21 | c4>21))假设您的期望是正确的,那么根据您的期望,我会说您的陈述是错误的

“我这样说是因为a或b应该大于59,c1、c2、c3或c4应该大于21。”

下面陈述中的“”导致您的期望落空。 第一部分“a或b应大于59”在a为50且b为30时评估为错误

第二部分“c1、c2、c3或c4应大于21”在c1为25时评估为真

因此,if(…)中的整个条件表达式可以归结为: 假真。这总是会导致错误,这就是为什么您的控制流会进入其他部分


您需要更正您的陈述或您的期望。

如果
b
为30,则
(b>59)
false
,也为
(a>59)
假的
因为
a
是50-为什么你会惊讶你最终进入
else
分支?@UnholySheep我这样说,a或b应该大于59,c1,c2,c3或c4应该大于21,这是真的陈述此刻,你正在检查所有c1,c2,c3,和c4大于21,因为您使用的是and运算符而不是将每个测试放在括号中(这不会给语句添加任何值),而是在每个单独的条件周围使用括号。例如,
if((a>59)| |(b>59)&……
应该是:
if((a>59 | | b>59)&……
这将帮助您更容易地理解您的条件,并创建更精确的执行。作为旁注,对于这种检查
Math
很方便:
Math.max(a,b)>59&&Math.max(c1,c2,c3,c4)>21
-如果您真的想检查所有cX值的最小值为21:
Math.max(a,b)和&Math.min(c1,c2,c3,c4)>21
“这就是您实际寻找的”的确——但为什么呢?解释可能非常有力。@T.J.Crowder我刚才正在研究它,不过谢谢你的提醒!最好等到你的答案完成后再发布,而不是在之后再完成。@T.J.Crowder我刚刚试过,我给出了
a值50
b值30
c1值30
去别的地方statement@Jason因为50<59。用类似于
a=60,b=30,c1=30的东西来检查这一点