JSLINT 关于样式的警告或关于条件表达式的错误

Posted

技术标签:

【中文标题】JSLINT 关于样式的警告或关于条件表达式的错误【英文标题】:JSLINT warning about style or error about Conditional Expression 【发布时间】:2011-07-24 03:57:49 【问题描述】:

我正在尝试解决 JSLINT 对我不知道如何解决的两件事的警告。哪一行应该换成什么代码?我在下面粘贴了有问题的代码和关于它们的警告。非常感谢您的建议/回答。

JSLINT 说:

第 137 行的问题:需要一个条件表达式,而是看到一个赋值。

while(elem = document.getElementById("optionsDiv"+g))

第 140 行的问题:预期为 '' 而看到的是 'return'。

return g;


function isAnyOptionVisible()

    var g=0;
    while(elem = document.getElementById("optionsDiv"+g))
    
        if(elem.className==="optionsDivVisible")
            return g;
        g++;
    
    return -1;

【问题讨论】:

【参考方案1】:

条件没有任何问题,只是elem 可能是全局的,如果它没有在外部范围内声明。如果未声明,请提前声明:

var elem, g=0;    

如果你想让 JSLint 开心,你可以给 null 添加显式比较:

while((elem = document.getElementById("optionsDiv"+g)) !== null)

我没有看到任何关于“预期 ”的内容。但是,将 g++ 与大括号放在同一行是一种奇怪的风格。

请记住,JSlint 部分与 Crockford 的个人偏好有关,您不必总是同意。

编辑:好的,第二个错误是因为 JSLint 希望您将返回值放在大括号中,例如:

    if(elem.className==="optionsDivVisible")
    
        return g;
    
    g++;

这也是我喜欢编码的风格。我确实发现它避免了某些错误。然而,这又是主观的。明显的权衡是它增加了两条线。

【讨论】:

+1 Mattjew,对不起,我不小心放了自己的测试版本,请查看旧代码,以便更清楚地说明错误(我只是随机放置了一个括号,这不应该出现在我的问题中)好奇你可能改变答案和更好地放置大括号,如果有的话! 太棒了@Matthew 谢谢! PS你的名字让我想起了美国喜剧XNYX NewsRadio中我最喜欢的角色。它就像 Seinfield 一样被聪明的观众更好地理解。听说过 WNYX 新闻广播吗? @Sam,听说过,但没看过。

以上是关于JSLINT 关于样式的警告或关于条件表达式的错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Sublime Text 2 中隐藏不必要的 JSLint 警告

JavaScript:错误 - “期望一个赋值或函数调用,而是看到一个表达式”?

检查/验证javascript语法的简单方法

eslint 或 jslint 中的 Javascript lambda/匿名函数长度警告

抑制 JSHint / JSLint 或替代服务中的“混合空格和制表符”警告?

JSLint 错误:将所有“var”声明移动到函数顶部