以下摘录引用ECMAScript 2017 .
11.8.4 字符串文字,注释 1
A string literal is zero or more Unicode code points enclosed in single or double quotes. Unicode code points may also be represented by an escape sequence. .... Any code points may appear in the form of an escape sequence.
11.8.4 字符串文字,语法
非终结符EscapeSequence
具有以下词法语法产生式:
EscapeSequence ::
CharacterEscapeSequence
0 [lookahead ∉ DecimalDigit]
HexEscapeSequence
UnicodeEscapeSequence
非终结符CharacterEscapeSequence
具有以下词法语法产生式:
CharacterEscapeSequence ::
SingleEscapeCharacter
NonEscapeCharacter
11.8.4.3 静态语义:SV
包含如下描述:
The SV of DoubleStringCharacter :: \ EscapeSequence is the SV of the EscapeSequence
问题
- 注释 1 中的
转义序列
是什么意思?尝试理解转义序列的实际作用,而不仅仅是它的词汇语法 - 为什么
CharacterEscapeSequence
包含NonEscapeCharacter
? - 11.8.4.3 Static Semantics: SV中的描述似乎不遵循词法语法产生的正常 ECMAScript 约定。这些描述是什么意思?
- 添加问题:注释 1 是否声明代码点可以位于引号内,或者位于转义序列(例如反斜杠)之后?这就是
任何代码点都可以以转义序列的形式出现
的意思吗?
最佳答案
-
What is meant by escape sequence in Note 1?
EscapeSequence
从你的下一个问题开始。 -
Why does CharacterEscapeSequence include NonEscapeCharacter?
因为无效转义符的反斜杠会被忽略 - 例如
'\c' === 'c'
。向后兼容性无法被破坏。 -
11.8.4.3 Static Semantics: SV contains descriptions such as “The SV of
DoubleStringCharacter :: \ EscapeSequence
is the SV of the EscapeSequence”. Those lines do not follow the normal ECMAScript convention for lexical grammar productions. What is meant by those descriptions?这意味着您应该引用EscapeSequence对应的同一节中的规则。例如,如果您有
"\x20"
,\x20
将是一个由\
组成的 DoubleStringCharacter和逃生序列x20
,这又是一个 HexEscapeSequencex
HexDigit HexDigit,其 SV 为The SV of
HexEscapeSequence :: x HexDigit HexDigit
is the code unit value that is (16 times the MV of the first HexDigit) plus the MV of the second HexDigit.
关于javascript - ECMAScript 2017 : Why does EscapeSequence include NonEscapeCharacter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49604170/