【问题标题】:jsLint Expected {jsLint 预期 {
【发布时间】: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, 即可更改提示配置

标签: javascript coding-style jslint


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

【讨论】:

    猜你喜欢
    • 2016-08-21
    • 2011-01-15
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    相关资源
    最近更新 更多