10.1 源文本
语法
SourceCharacter::
any Unicode code point
ECMAScript代码使用Unicode表示,8.0.0或更高版本。ECMAScript源文本是一个代码点序列。所有Unicode代码点值从U+0000 到 U+10FFFF,包括代理代码点,也可能出现在源文本中,只要ECMAScript语法允许。实际用于存储和交换ECMAScript源文本的编码与本规范无关。无论外部源文本编码是什么,一个符合ECMAScript标准的实现,对源文本处理时,都把源文本当作是一段SourceCharacter值的序列,每个SourceCharacter都是Unicode代码点。符合ECMAScript实现不需要对源文本执行任何正规化操作,也不要求其表现为好像他们执行了源文本的正规化一样。
组合字符序列的每个组成部分都是单个“Unicode 字符”,尽管用户可能会认为整个序列是单个字符
注意:在字符串字面量,正则表达式字面量、字符串模板和标识符中,任何Unicode代码点都可以用Unicode 转义序列表示,即直接用\u加代码点的数字值表示。在注释中,这样的转义序列被当作注释的一部分忽略掉。 ECMAScript 与 Java 编程语言对 Unicode 转义序列有不同的解释。在 Java 程序中,如果 Unicode 转义序列 \u000A 出现在单行注释中,它会被解释成行终止符 (Unicode 字符 000A 是换行),因此接下来的一个字符不是注释的一部分。与此类似,如果 Java 程序中的字符串字面量里出现 Unicode 转义序列 \u000A,它同样会被解释成行终止符,字符串字面量里不允许出现行终止符,不得不将作为字符串字面量字符值的换行符的 \u000A 替换成 \n。在 ECMAScript 程序中,始终不会解释注释里出现的 Unicode 转义序列,因此无法给注释贡献终止符。与此类似,如果 ECMAScript 程序中的字符串字面量里出现 Unicode 转义序列,它始终会贡献一个字符给字面量值,并且始终不会解释成有可能终止字符串字面量的行终止符或引号标记
10.1.1 UTF16Encoding(cp)
- Assert: 0 ≤ cp ≤ 0x10FFFF.
- If cp ≤ 65535, return cp.
- Let cu1 be floor((cp - 65536) / 1024) + 0xD800.
- Let cu2 be ((cp - 65536) modulo 1024) + 0xDC00.
- Return the code unit sequence consisting of cu1 followed by cu2.
10.1.2 UTF16Decode(lead, trail)
- Assert: 0xD800 ≤ lead ≤ 0xDBFF and 0xDC00 ≤ trail ≤ 0xDFFF.
- Let cp be (lead - 0xD800) × 1024 + (trail - 0xDC00) + 0x10000.
- Return the code point cp.