11.6 命名和关键字

在Unicode规范中说明,标识符名和保留字是tokens。保留字是标识符名的可枚举的子集。词法语法规定,Identifier 是一个 IdentifierName 但不是保留字。Unicode标识符语法是基于Unicode标准中定义的字符特性的。Unicode代码单元在8.0.0版本中规定的,在ECMAScript规范的实现中必须实现。ECMAScript实现可能会识别Unicode以后的版本中规定的标识符。

注意1:本规范中额外添加了 $ 和 _ 允许出现在标识符名中的任何位置。并且 U+200C (零宽非连接符) 和 U+200D (零宽链接符) 允许出现在标识符名中的第一个字符后的任何位置

标识符名中允许出现Unicode转义字符序列,它们会被当做贡献了一个单Unicode字符。代码单元会被 UnicodeEscapeSequence 中的 HexDigits 所处理(见11.8.4)。\ 出现在 UnicodeEscapeSequence 和 u 和 { } 代码单元之前,如果它们出现了,将不会生成代码单元给标识符名。一个转义字符不会被转义成非法的标识符名。换句话说,\ 转义字符序列将会替换原字符,结果必须是有效的标识符名,并且精确的和原标识符名字符一样。本规范中说明的所有标识符均是指其实际字符,无论其有没有转义序列

两个标识符原则上相等,指的是字符序列严格相等,在替换了转义字符之后

语法
IdentifierName::
    IdentifierStart
    IdentifierNameIdentifierPart
IdentifierStart::
    UnicodeIDStart
    $
    _
    \UnicodeEscapeSequence
IdentifierPart::
    UnicodeIDContinue
    $
    _
    \UnicodeEscapeSequence
    <ZWNJ>
    <ZWJ>
UnicodeIDStart::
    any Unicode code point with the Unicode property “ID_Start”
UnicodeIDContinue::
    any Unicode code point with the Unicode property “ID_Continue”

非终结符的 UnicodeEscapeSequence 定义在11.8.4

注意2:The sets of code points with Unicode properties “ID_Start” and “ID_Continue” include, respectively, the code points with Unicode properties “Other_ID_Start” and “Other_ID_Continue”

11.6.1 标识符名

11.6.1.1 Static Semantics: Early Errors

IdentifierStart:: \UnicodeEscapeSequence

  • 这是一个 Syntax Error 如果 SV(UnicodeEscapeSequence) 不是 "$", 或者 "_", 或者 UnicodeIDStart 词法语法产生式匹配的UTF16Encoding 代码单元 中之一

IdentifierPart:: \UnicodeEscapeSequence

  • 这是一个 Syntax Error 如果 SV(UnicodeEscapeSequence) 不是 "$", or "_", 或者非 或者 的 UTF16Encoding 从 UnicodeIDStart 词法语法产生式匹配的UTF16Encoding代码单元 中之一.

11.6.1.2 Static Semantics: StringValue

IdentifierName::
    IdentifierStart
    IdentifierNameIdentifierPart
  1. 返回和 IdentifierName 相关代码单元的字符串值. 在探测字符序列时会首先替换转义序列,然后整个标识符名会一个字符一个字符的被转换为UTF16Encoding.

11.6.2 保留字

保留字是不能用来作为标识符的标识符名

语法
ReservedWord::
    Keyword
    FutureReservedWord
    NullLiteral
    BooleanLiteral

注意:保留字中的字符不能通过Unicode转义符转义而来

11.6.2.1 关键字

下面的字符就是ECMAScript中的关键字,并且可能不能在程序中作为标识符

语法
Keyword::one of
    break do in typeof case else instanceof var catch export new void class extends return while const finally super with continue for switch yield debugger function this default if throw delete import try

注意:yield在某些上下文环境中会以标识符一样的使用,如12.1.1.在严格模式,let和static被当作保留字是因为静态语法限制,而不是词法语法。

11.6.2.2 未来保留字

下面的tokens被保留,是因为有可能会在未来的语言扩展中当做关键字

语法
FutureReservedWord::
    enum
    await

当Module是语法语法的目标象征时,await 只被当做未来保留字

注意:以下的tokens在严格模式下也是被当做保留字,是被静态语法检查限制,而不是词法语法

implements package protected
interface private public

results matching ""

    No results matching ""