JSLint错误'&&'子表达应该用parens包裹?或与IF条件错误

时间:2014-07-05 09:03:41

标签: javascript jquery if-statement syntax jslint

JSLint给出了以下错误:

  

'&&'子表达式应该包含在parens中。

以下是导致问题的行:

if (anchorLink === 'page1' || anchorLink === 'page2' || anchorLink === 'page3' && (!$('#myDiv').hasClass('boom'))) { /* stuff */ }

我很抱歉这是因为问了一个非常相似,几乎完全相同的问题here,但我尝试了不同的方式来包装那个&&条件,我无法使其发挥作用。任何有关正确语法的帮助都会非常感激。

3 个答案:

答案 0 :(得分:3)

关键是,您目前正在使用运算符优先级。 基本上你有一个隐含的括号:

anchorLink === 'page1' || anchorLink === 'page2' || (anchorLink === 'page3' && !$('#myDiv').hasClass('boom'))

可能是也可能不是你想要的。

例如,你的意思是:

(anchorLink === 'page1' || anchorLink === 'page2' || anchorLink === 'page3') && !$('#myDiv').hasClass('boom')

为了避免歧义,JSLint建议在你的条件中加上明确的括号。

答案 1 :(得分:3)

如果括号应该独立于anchorLink条件,请将括号括在所有hasClass条件下。

if ((anchorLink === 'page1' || anchorLink === 'page2' || anchorLink === 'page3')
    && (!$('#myDiv').hasClass('boom'))) { /* stuff */ }

如果您只想将hasClass条件与page3结合使用,那么应该是:

if (anchorLink === 'page1' || anchorLink === 'page2' ||
    (anchorLink === 'page3' && (!$('#myDiv').hasClass('boom')))) { /* stuff */ }

第二个版本是您在省略括号时获得的解释,因为&&的优先级高于||。这是一个常见的错误(第一个意思更可能是你的意图),这就是JSLint警告它的原因。

答案 2 :(得分:2)

我假设您还需要在&&之前包装条件以消除表达式的歧义:

if ((anchorLink === 'page1' || anchorLink === 'page2' || anchorLink === 'page3') && (!$('#myDiv').hasClass('boom'))) { /* stuff */ }