【发布时间】:2015-05-08 19:53:00
【问题描述】:
我不理解下面的 if-then-else 子句,这是我在我正在处理的一段代码中发现的。
if (prefstocking && prefstocking >0) {
...
} else {
...
}
为什么变量prefstocking出现在逻辑运算符&&的两边?我认为使用逻辑运算符&& 意味着同时使用它们,就像这样:if (x && y = 1) 对我来说很有意义,意思是“如果 x 等于 1 并且 y 等于 1”,但是两次使用相同的值是什么意思?
【问题讨论】:
-
prefstocking && prefstocking > 0表示(prefstocking) && (prefstocking > 0)。因此,它正在检查以确保 prefstocking 不是虚假的,并且它大于 0。似乎是合理的 -
@wolffer-east 但
([false|0|undefined|null|''] > 0)为假;为什么还要费心检查虚假性呢? -
@Mathletics 因为我从未实际测试过
([false|0|undefined|null|''] > 0)。现在它似乎根本不合理:)。条件的逻辑分离仍然需要注意,尽管两者兼有的有效性 -
@wolffer-east 这就是我的观点;人们用这些东西来修饰他们的代码,因为他们没有逻辑地思考正在发生的事情。
-
这里的其他人似乎忽略了这样一个事实,即如果第一个测试失败,那么解释器甚至不需要检查第二个条件——而且可能不会。尽管额外的条件在数学上可能是多余的,但由于计算顺序的原因,首先包含冗余的简单检查以提高效率可能仍然很有价值。
标签: javascript if-statement operators logical-operators