多个javascript条件
我在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 =
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或b是否大于59(a>59 | b>59)
如果其中一个大于21,则为真(c1>21 | | c2>21 | | c3>21 | | c4>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的东西来检查这一点