简而言之,您需要配置 JSLint 以容忍 ECMAScript 5。
这可以通过以下方式完成:
/*jslint es5: true, all-your-other-jslint-options */
长答案:
序列,\
后面跟着一个行终止符,直到最近(版本 5,2009 年 12 月)才真正有效的 Javascript。
从 ECMAScript (ECMA-262) 标准的上一个迭代(版本 3)中,第 7.8.4 节指出:(删除了一些不相关的条目):
StringLiteral ::
" DoubleStringCharacters(opt) "
' SingleStringCharacters(opt) '
SingleStringCharacters ::
SingleStringCharacter SingleStringCharacters(opt)
SingleStringCharacter ::
SourceCharacter but not single-quote ' or backslash \ or LineTerminator
\ EscapeSequence
所以你的序列最终在上面的最后一行,一个\
后跟语法元素EscapeSequence
。进一步检查:
EscapeSequence ::
CharacterEscapeSequence
0 [lookahead ∉ DecimalDigit]
HexEscapeSequence
UnicodeEscapeSequence
CharacterEscapeSequence ::
SingleEscapeCharacter
NonEscapeCharacter
SingleEscapeCharacter :: one of
' " \ b f n r t v
NonEscapeCharacter ::
SourceCharacter but not EscapeCharacter or LineTerminator
EscapeCharacter ::
SingleEscapeCharacter
DecimalDigit
x
u
HexEscapeSequence ::
x HexDigit HexDigit
UnicodeEscapeSequence ::
u HexDigit HexDigit HexDigit HexDigit
由于下一个字符之后\
两者都不是0
, x
or u
,唯一的选择是CharacterEscapeSequence
这归结为SingleEscapeCharacter
(情况并非如此,因为行终止符不是列出的字符之一)或NonEscapeCharacter
(明确地excludes行终止符作为一种可能性)。
该部分的底部还有此注释:
注意:“LineTerminator”字符不能出现在字符串文字中,即使前面有反斜杠。使行终止符成为字符串文字的字符串值的一部分的正确方法是使用转义序列,例如 \n 或 \u000A。
现在,ECMAScript 5changed那一点点。从那里开始,他们修改了定义SingleStringCharacter
thus:
SingleStringCharacter ::
SourceCharacter but not one of ' or \ or LineTerminator
\ EscapeSequence
LineContinuation
LineContinuation ::
\ LineTerminatorSequence
并将注释修改为:
注意:行终止符不能出现在字符串中,除非作为 LineContinuation 的一部分来生成空字符序列。使行终止符成为字符串文字的 String 值的一部分的正确方法是使用转义序列,例如 \n 或 \u000A。
而且,作者并没有破坏所有当前脚本的 JSLint,而是明智地决定将 ECMAScript 5 支持设为可选,需要更改 JSLint 选项才能激活它。这样,如果您明确告知它,它只会允许 ECMAScript 5。
您可以访问http://www.jslint.com/ http://www.jslint.com/网站并确认这一点:
Code:
var xyzzy = ' \
hello";
Error:
Problem at line 1 character 16: This is an ES5 feature.
var xyzzy = ' \
Problem at line 2 character 13: Unclosed string.
hello";
Problem at line 2 character 13: Stopping. (66% scanned).
如果您然后向下滚动到标志部分,则会有一个条目Tolerate ES5 syntax
设置后,将消除该错误。