129

有人可以向我解释为什么 JSHint 抱怨以下内容,

window.location.href = String1
    + '#'
    + Sting2
    + '='
    + String3;

有了错误,Bad line breaking before '+' error

我了解可以使用选项配置此错误,该laxbreak 选项描述为

此选项会抑制大多数关于代码中可能不安全的换行符的警告。它不会抑制有关逗号优先编码样式的警告。要抑制那些你必须使用 laxcomma (见下文)。

这个解释非常简洁,我很好奇为什么以这种方式断线首先被认为是不好的或松懈的。

请记住,我并不是想在这里发动一场圣战,我只是在寻找一个客观的答案,说明为什么 JSHint 人认为这很糟糕,是否只是他们注入到他们的 linter 中的一种风格偏好(我认为 JSLint 是自以为是的 linter),或者如果以这种方式换行时某些解释器可能会出错。

4

3 回答 3

111

它是一种风格指南,可避免可能自动分号插入假设产生影响的语句。

这个想法是,您可以在一行的末尾清楚地表明表达式是在那里结束还是可以在下一行继续。

于 2013-02-28T16:53:23.523 回答
12

如果您在换行符之前使用 + 而不是在新行中使用,Jshint 不会将此标记为错误的换行符。像这样:

window.location.href = String1 +
'#' +
Sting2 +
'=' +
String3;
于 2015-02-18T16:43:16.993 回答
3

不是对这个问题的直接回答,但对于希望保留规则但修复警告的谷歌搜索(就像我一样)遇到这个问题的人来说,以下内容可能有用......

使用 Notepad++(例如使用 JSLint 插件)时,可以使用以下搜索和替换来修复:

  • 找什么:(\r\n|\n|\r)( *)\+
  • 替换为:(包括第一个和最后一个空格) +$1$2 
  • 搜索方式:正则表达式

(仅在 Windows 上测试,但正则表达式也应该适用于 Unix 或 Mac OS 行尾。)

||要为, &&, ==,或代替做类似的事情!=,请使用:<=>=+

  • 找什么:(\r\n|\n|\r)( *)(\|\||&&|==|!=|<=|>=)
  • 替换为:(包括第一个和最后一个空格) $3$1 $2 
于 2014-12-06T15:49:37.263 回答