var freebie = ' \
<div class="item'+last+'" data-type="psd" data-visited="false"> \
<div class="baseBubble" /> \
<div class="baseStroke" /> \
<div class="baseThickerStroke" /> \
<div class="thumbnail"> \
<div class="overlay" /> \
<img src="'+item['thumb'][0]+'" width="'+item['thumb'][1]+'" height="'+item['thumb'][2]+'" /> \
</div> \
</div>';
有谁知道为什么这会在JSLint中返回2个错误?
这是2个错误的图像:
答案 0 :(得分:4)
简短回答,您需要配置JSLint以容忍ECMAScript 5.
这可以通过以下方式完成:
/*jslint es5: true, all-your-other-jslint-options */
答案很长:
序列\
后跟行终止符,直到最近才真正有效Javascript(版本5,2009年12月)。
从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
或u
,唯一的选择是CharacterEscapeSequence
,其归结为{{1} (不是因为行终止符不是列出的那些字符之一)或SingleEscapeCharacter
(明确排除行终止符的可能性)。
该部分的底部还有这个注释:
注意:“LineTerminator”字符不能出现在字符串文字中,即使前面有反斜杠也是如此。使行终止符字符成为字符串文字的字符串值的一部分的正确方法是使用转义序列,例如\ n或\ u000A。
现在,ECMAScript 5 稍微改变了。从那里开始,他们修改了NonEscapeCharacter
的定义:
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/网站并确认:
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).
如果您向下滚动到标记部分,则会有一个SingleStringCharacter
条目,当设置该条目时,将删除该错误。