以下摘录参考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
问题
escape sequence
是什么意思?试图理解转义序列实际上做了什么,而不仅仅是它的词汇语法CharacterEscapeSequence
包含NonEscapeCharacter
?Any code points may appear in the form of an escape sequence
的意思吗?答案 0 :(得分:2)
注1中的转义序列是什么意思?
下一个问题的EscapeSequence
。
为什么CharacterEscapeSequence包含NonEscapeCharacter?
因为无效的转义只是忽略了反斜杠 - 例如'\c' === 'c'
。向后兼容性无法解决。
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。