JSHint的“ +”错误之前的坏行中断的解释


125

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

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

出现错误 Bad line breaking before '+' error

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

此选项禁止显示有关代码中可能存在不安全换行的大多数警告。它不会抑制有关逗号优先编码风格的警告。要抑制这些,您必须使用Laxcomma(请参见下文)。

这种解释非常简洁,我很好奇为什么首先将这种方式的断行视为坏事或松懈。

请记住,我不是要在这里发动一场圣战,我只是想寻找一个客观的答案,为什么JSHint的人们认为这很糟糕,是否只是他们向他们的短毛猫注入了一种风格偏好(我认为JSLint是固执己见的linter),或者以这种方式换行时某些口译员是否会出问题。


6
根据JSHint的说法,我认为这只是“坏风格”。如果使用前导逗号,则会得到相同的效果。为了提高可读性,我至少会在行尾用+重写它。
伊万

28
笨蛋 我认为这种样式绝对是用于多行字符串的最易读的样式,尤其是在狭窄的窗口中查看代码时。
兰巴特2014年

12
以继续该语句的标记开头可以帮助对齐内容并在代码块的左侧部分直观地表达连续性,这是人们期望找到结构元素的地方,尤其是在快速扫描时。这绝对是可行和合理的,客观上不是坏风格。但是,执行此规则存在代码完整性问题,这是不幸的。
亚当·托利

1
@AdamTolley我完全同意,当我问到这个时,似乎可以确认这是FUD。在“元效应”之后受到审查;仔细检查似乎证实了这是可行和合理的。
HostileFork说不要信任2015年

2
如今(JSHint 2.9.4),错误消息是'+'之前的误导换行;读者可以将其解释为表达边界。
RhinoDevel

Answers:


107

这是一种样式指南,可避免使用可能会假想有关自动分号插入的语句

这个想法是让您在一行的末尾弄清楚表达式是在此结束还是可以在下一行继续。


6
感谢您的回答,对错误有一个合理的解释,这使我更容易证明进行更改以安抚JSHint。
James McMahon

36
自动分号插入是强制实施此样式的合理理由。但是,当表达式位于括号内时,警告仍然存在。而且,这让我很难过。
本·海德2014年

23
第二个@BenHyde,通常在浏览代码时使用时更容易理解+。比起跳到每一行的末尾看是否要在下一行添加内容,在眼睛上跟随左侧的单个列更容易(并且更容易出错)。即使语法也不那么笨拙:“第118行附加117”与“第117行将由第118行附加”。
worc

9
就我个人而言,我讨厌将运算符(和逗号)添加到行尾,因为我略过了它。对我来说,读取多行布尔语句(在行的开头而不是末尾的&&或||)中的逻辑比较容易,而且我可以通过以逗号分隔的列表以其他多行语句开头来快速区分逗号分隔列表逗号。感谢上帝laxbreak
AAAAAA

2
@Barney您如何通过我非常相似的问题的答案解决对自动分号插入的担忧?这种格式的合理风险是什么?对我来说,它具有可扫描性方面的优势。
HostileFork说不要信任2015年

8

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

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

10
这甚至不能回答一个问题。为什么要这么多投票?
Lambart

4
也许但这是解决此问题的一种方法,而无需更改jshint设置。
asulaiman

4
这应该是一个评论,因为它并不能真正回答问题,但是可以提供有价值的信息。
tomtomssi

3

不是直接解决问题的方法,但是对于希望保留规则但解决警告的Googling使用者(如我一样),以下内容可能会有用...

使用Notepad ++(例如,带有JSLint插件)时,可以使用以下搜索和替换来解决此问题:

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

(仅在Windows上进行了测试,但正则表达式也应在Unix或Mac OS的行尾使用。)

做类似的事情||&&==!=<=>=代替+,这样做:

  • 找什么: (\r\n|\n|\r)( *)(\|\||&&|==|!=|<=|>=)
  • 替换为:(包括第一个和最后一个空格) $3$1 $2 

5
可能对想更改其格式的人有用。但是它完全无法回答(暗示的)问题:“我很好奇为什么首先将这种方式的断线视为坏事或松懈。”
Lambart

公平的说,在顶部添加了一条注释,解释了我为何张贴此消息。
史蒂夫·钱伯斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.