2

以下摘录参考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 是 EscapeSequence 的 SV

问题

  1. escape sequence注1中的含义是什么?试图理解转义序列的实际作用,而不仅仅是它的词汇语法
  2. 为什么CharacterEscapeSequence包括NonEscapeCharacter
  3. 11.8.4.3 静态语义:SV中的描述似乎不遵循用于词法语法产生的正常 ECMAScript 约定。这些描述是什么意思?
  4. 添加的问题:注 1 是否说明代码点可以在引号内或在转义序列(例如反斜杠)之后?是这个意思Any code points may appear in the form of an escape sequence吗?
4

1 回答 1

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

    从你的EscapeSequence下一个问题。

  2. 为什么 CharacterEscapeSequence 包含 NonEscapeCharacter?

    因为无效的转义只是忽略了它们的反斜杠——例如,'\c' === 'c'. 不能破坏向后兼容性。

  3. 11.8.4.3 静态语义:SV 包含诸如“The SV of DoubleStringCharacter :: \ EscapeSequenceis the SV of the EscapeSequence”之类的描述。这些行不遵循词汇语法产生的正常 ECMAScript 约定。这些描述是什么意思?

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

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

于 2018-04-02T01:33:05.337 回答