jsLint 预期

Posted

技术标签:

【中文标题】jsLint 预期【英文标题】:jsLint Expected 【发布时间】:2012-03-30 05:28:56 【问题描述】:

鉴于以下

for(var i=0; i< data.cats.length; i++) list += buildCategories(data.cats[i]);

jsLint 告诉我

Expected '' and instead saw 'list'.

使用较短的符号而不是用花括号括起来有实际的缺点吗?

【问题讨论】:

如果您确定不想进行该检查,则只需提供 "curly":false, 即可更改提示配置 【参考方案1】:

这是一种防御性编程 - 使用大括号清楚地定义了哪些语句打算与 for 关联。

如果您不使用大括号,稍后有人可能会错误地在 list += buildCategories... 下添加另一个语句,期望它也与 for 循环一起执行。

【讨论】:

我不同意 Crockford 的所有风格规则,但我 100% 同意这一点。 这对我来说很烦人,因为我使用了 for-if。 for(var k in obj) if (obj.hasOwnProperty(k)) ...(或与其他过滤器一起使用)非常非常有用,但该模式会引发此警告。我认为这和else if 一样合法(否则需要大括号) 我正在调试别人的几千行代码,所以我没有决定是否使用“正确样式”的奢侈。当然可以很好地抑制这些错误,特别是因为一旦遇到 JSLint 就不会继续...... @Fábiosantos jslint 还抱怨else if 并要求您将其更改为else if @bluesmoon 你没有错吗?我刚刚检查过,它没有抱怨。【参考方案2】:

“使用较短的符号有实际的缺点吗...”

如果您对编码不小心,这可能是错误的根源,但忽略它们可以提供更清晰的 IMO 代码,并且如果您遵守一致且经过深思熟虑的编程标准,那么忽略它们将不是问题。

例如,当我嵌套了 if/else 语句,而这些语句本来可以排除大括号时,我更喜欢平衡 elses 而不是使用大括号。

if (condition)
    if (condition2)
        inner_if()
    else ;
else
    outer_if()

那个代码仍然比这个 IMO 更干净......

if (condition) 
    if (condition2) 
        inner_if();
    
 else 
    outer_if();

如果有人可以在ifelse 中添加另一个语句,那么这是一个需要解决的理解问题。

所以实际上这只是使用什么标准的问题。利用花括号当然是一种有效的选择,但我们不应该对此过于教条。


如果您想要更可配置的工具,可以考虑使用jsHint.com。

【讨论】:

@AdamRackis:我所有的答案现在都是 CW。我想我只是更喜欢这种方式。 厌倦了代表竞赛,嗯? :) @AdamRackis:是的,现在我在这里拥有一套很好的特权,我并不真正关心代表。我宁愿 CW 它,如果他们愿意,让其他人对增加价值感到更自在。 这真的很酷。唯一的其他特权是 20K,这只是删除内容的扩展能力。所以你已经很充分了。 @AdamRackis:是的,这么大的力量可能只会让我头疼。 ;)【参考方案3】:

JSLint 检查是否遵循良好的代码风格。插入花括号总是很好的风格,因为代码所属的位置很明显。并且它更短并不是一个真正的论点,因为大多数缩小器无论如何都会照顾到这一点。

【讨论】:

以上是关于jsLint 预期的主要内容,如果未能解决你的问题,请参考以下文章

禁止显示“预期为 '===' 而看到的是 '=='。” jslint中的错误

jslint 错误 - #1 预期为 '(end)' 而看到的是 '<!'

jslint:如何抑制'预期的'Object.create(null)',而是看到'新对象'。警告?

JSLint 错误:“预期在 EOF 处换行”,与 Beautify 插件冲突

为啥 JSLint 要我使用双引号而不是单引号?预期为 '"' 而看到的是 '''

jslint4java 外部 jslint 选项被忽略