错误的逻辑条件

时间:2016-09-09 15:06:01

标签: javascript if-statement conditional-statements

在我看来,我在逻辑条件下犯了同样的错误。当我希望条件something is notother something is not发生一些事情时,我写下这是错误的:

if(el.type !== 'hidden' || !el.disabled) {
    el.value = '';
}

应该是这样的

if(false === (el.type === 'hidden' || el.disabled)) {
    el.value = '';
}

我认为:我希望在其类型未被隐藏或未被禁用时清除元素值... - 用英语编程语言写下它会使情况变得糟糕。

如何将这个逻辑问题考虑在内呢?

1 个答案:

答案 0 :(得分:2)

英语语义和逻辑运算符之间存在一个小差距。当你说“如果el没有隐藏或禁用”时,在最正确的解释中有一个围绕“隐藏或禁用”的精神括号,而JavaScript会将其视为“If(el未隐藏)或(el is disabled)”如果你用最直接的方式写它。

您应该将第二个版本视为“如果不是:(元素被隐藏,或元素被禁用。)”这不是简单的英语,您将始终需要稍微弄清楚您的逻辑。要节省打字,您可以简单地写为:

if (!(el.type === 'hidden' || el.disabled))

还有正确的方法用“AND”来写它,并在两次比较中都否定(正如评论所指出的那样)。有时,我发现一个或另一个更快地适应心智模型并修复我的大的真/假块。

在考虑这些情况时要记住的一件事是,如果你想要否定,或者将支票转向相反的方式(例如,你想把它变成自己的“其他”条件),你会想要转向“或”变为“AND”,反之亦然。

if (!a && !b) {
// negated:
if (a || b)