标识符名和标识符

2018-06-16 14:27 更新

标识符名是 tokens,Unicode 标准第 5 章的“标识符”节给出的文法加入了一些小的修改来解释它。Identifier 是一个 IdentifierName 但不是一个 ReservedWord( 见 7.6.1)。Unicode 标识符文法基于 Unicode 标准指出的 normative 和 informative 字符分类。所有符合 ECMAScript 的实现必须能够正确处理 Unicode 标准 3.0 版本中指定的分类里的字符的分类。


本标准增加了个别字符:在 IdentifierName 的任何位置允许出现美元符($)和下划线(_)。


IdentifierName 还允许出现 Unicode 转义序列,它们被 UnicodeEscapeSequence 的 CV 计算成单个字符贡献给 IdentifierName(见 7.8.4)。UnicodeEscapeSequence 前面的 \ 不给IdentifierName 贡献字符。UnicodeEscapeSequence 不能提供单个字符给将要成为非法字符的 IdentifierName。换句话说,如果一个 \ UnicodeEscapeSequence 序列被UnicodeEscapeSequence 的 CV 替换,结果必须仍是有效的包含与原 IdentifierName 精确相同字符序列的 IdentifierName。本规范说明的所有标识符是根据它的实际字符,不管转义序列贡献特定字符与否。


根据 Unicode 标准两个规范的 IdentifierName 相等,是说除非他们的代码单元序列准确相等,否则不同(换句话说,符合 ECMAScript 的实现只需要按位比较 IdentifierName 值)。其目的是为了传入编译器之前就把源文本转换为正常化形式 C。


ECMAScript 实现可以识别后续版本 Unicode 标准定义的标识符字符。如果考虑可移植性,程序员应该只采用 Unicode 3.0 中定义的标识符字符。


语法:

Identifier :: 
IdentifierName but not ReservedWord
IdentifierName :: 
IdentifierStart 
IdentifierName IdentifierPart
IdentifierStart :: 
UnicodeLetter 
$ 
_ 
\ UnicodeEscapeSequence
IdentifierPart :: 
IdentifierStart 
UnicodeCombiningMark 
UnicodeDigit 
UnicodeConnectorPunctuation
UnicodeLetter 
any character in the Unicode categories 
“Uppercase letter (Lu)”, “Lowercase letter (Ll)”, 
“Titlecase letter (Lt)”, “Modifier letter (Lm)”, 
“Other letter (Lo)”,or “Letter number (Nl)”.
UnicodeCombiningMark 
any character in the Unicode categories “Non-spacing mark (Mn)”\\\ 
or “Combining spacing mark (Mc)”
UnicodeDigit 
any character in the Unicode category “Decimal number (Nd)”
UnicodeConnectorPunctuation 
any character in the Unicode category “Connector punctuation (Pc)”
UnicodeEscapeSequence 
see 7.8.4.


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号