JSLint给出了以下错误:
'&&'子表达式应该包含在parens中。
以下是导致问题的行:
if (anchorLink === 'page1' || anchorLink === 'page2' || anchorLink === 'page3' && (!$('#myDiv').hasClass('boom'))) { /* stuff */ }
我很抱歉这是因为问了一个非常相似,几乎完全相同的问题here,但我尝试了不同的方式来包装那个&&条件,我无法使其发挥作用。任何有关正确语法的帮助都会非常感激。
答案 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 */ }