ECMAScript 2017:为什么EscapeSequence包含NonEscapeCharacter?

时间:2018-04-02 01:13:00

标签: javascript ecmascript-6 ecmascript-2017 ecma

以下摘录参考ECMAScript 2017

11.8.4字符串文字,注1

  

字符串文字是包含的零个或多个Unicode代码点   单引号或双引号。也可以表示Unicode代码点   通过逃脱序列。 ....任何代码点都可能以转义序列的形式出现。

11.8.4字符串文字,语法

非终结符号EscapeSequence具有以下词汇语法生成:

EscapeSequence ::
    CharacterEscapeSequence
    0 [lookahead ∉ DecimalDigit]
    HexEscapeSequence
    UnicodeEscapeSequence

非终结符号CharacterEscapeSequence具有以下词汇语法生成:

CharacterEscapeSequence ::
    SingleEscapeCharacter
    NonEscapeCharacter

11.8.4.3静态语义:SV

包含以下描述:

  

DoubleStringCharacter :: \ EscapeSequence的SV是。的SV   EscapeSequence

问题

  1. 注1中的escape sequence是什么意思?试图理解转义序列实际上做了什么,而不仅仅是它的词汇语法
  2. 为什么CharacterEscapeSequence包含NonEscapeCharacter
  3. 11.8.4.3 Static Semantics: SV中的描述似乎不符合词法语法产生的正常ECMAScript约定。这些描述是什么意思?
  4. 补充问题:注1是否表示代码点可以在引号内或者在转义序列之后(例如反斜杠)?那是Any code points may appear in the form of an escape sequence的意思吗?

1 个答案:

答案 0 :(得分:2)

  1.   

    注1中的转义序列是什么意思?

    下一个问题的EscapeSequence

  2.   

    为什么CharacterEscapeSequence包含NonEscapeCharacter?

    因为无效的转义只是忽略了反斜杠 - 例如'\c' === 'c'。向后兼容性无法解决。

  3.   

    11.8.4.3静态语义:SV包含诸如“DoubleStringCharacter :: \ EscapeSequence的SV是EscapeSequence的SV”之类的描述。对于词法语法产生,这些行不符合正常的ECMAScript约定。这些描述是什么意思?

    这意味着您应该参考与EscapeSequence对应的相同部分中的规则。例如,如果您有"\x20",则\x20将是由\和EscapeSequence x20组成的DoubleStringCharacter,而后者又是HexEscapeSequence x HexDigit HexDigit,其SV由

    给出
      

    HexEscapeSequence :: x HexDigit HexDigit的SV是代码单元值(第一个HexDigit的MV的16倍)加上第二个HexDigit的MV。