擒纵机构不良和未闭合的弦

2024-03-31

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 个错误?

这是两个错误的图像:

     enter image description here


简而言之,您需要配置 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设置后,将消除该错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

擒纵机构不良和未闭合的弦 的相关文章

随机推荐