源代码文本

2018-06-16 14:10 更新

用 3.0 或更高版本 Unicode 字符编码的一个字符序列来表示 ECMAScript 源文本。该文本预期已经正常化为 Unicode Technical Report #15 中描述的 Unicode 正常化形式 C(canonical composition)。符合 ECMAScript 的实现不要求对文本执行正常化,也不要求将其表现为像执行了正常化一样。为了目的,此规范 ECMAScript 的源文本被假定为一个 16 位代码单元,本规范的目的序列。这样的包含 16 位代码单元序列的源文本可能不是有效的的 UTF-16 字符编码。如果实际的源文本没有用 16 位代码单元形式编码,那么必须把它看作已经转换为 UTF-16 一样处理。


语法

SourceCharacter :: 
any Unicode code unit


贯穿本文档,短语“代码单元 (code unit)”和单词“字符 (character)”特指表示文本的单个 16 位单元的 16 位无符号值。短语“Unicode 字符 (Unicode character)”特指单个 Unicode 标量值(这可能大于 16 位,因此它可能代表多个代码单位)表示的语言或排版上的抽象单位。短语“代码点 (code point)”是指这样一个 Unicode 标量值。“Unicode 字符”仅指由单一的 Unicode 标量值表示的实体:组合字符序列的每个组成部分都是单个“Unicode 字符”,尽管用户可能会认为整个序列是单个字符。


在字符串字面量,正则表达式字面量,标识符中的任意字符(代码单元),可以是由六个字符组成的 Unicode 转义序列,即 \u 加上四个 16 进制数字。在注释中,这样的转义序列被当作注释的一部分忽略掉。在字符串字面量或正则表达式字面量中,Unicode 转义序列会给字面量值贡献一个字符。在标识符中,转义序列给标识符贡献一个字符。


注:虽然本文档有时会提到“字符串 (string)”里的“字符 (character)”和代表字符代码单元的 16 位无符号整数间的“变换 (transformation)”。事实上并没有变换,因为实际上就是用 16 位无符号值代表“字符串”里的“字符”。


ECMAScript 与 Java 编程语言对 Unicode 转义序列有不同的解释。在 Java 程序中,如果 Unicode 转义序列 \u000A 出现在单行注释中,它会被解释成行终结符(Unicode 字符000A 是换行),因此接下来的一个字符不是注释的一部分。与此类似,如果 Java 程序中的字符串字面量里出现 Unicode 转义序列 \u000A,它同样会被解释成行终结符,字符串字面量里不允许出现行终结符,不得不将作为字符串字面量字符值的换行符的 \u000A 替换成 \n。在 ECMAScript 程序中,始终不会解释注释里出现的 Unicode 转义序列,因此无法给注释贡献终止符。与此类似,如果 ECMAScript 程序中的字符串字面量里出现 Unicode 转义序列,它始终会贡献一个字符给字面量值,并且始终不会解释成有可能终止字符串字面量的行终结符或引号标记。


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

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号