6.1.4 String 类型

String 类型是零个或多个16位的无符号整数值(“元素”)的所有有序序列的集合,其最大长度为 2^53 - 1 个元素。String 类型通常表示在 ECMAScript 程序运行中的文本数据,在这种情况下,字符串中的每个元素都被视为 UTF-16 编码单元。每个元素都占据了序列内的一个位置。这些位置都是使用非负整数进行索引。第一个元素的索引都是 0,下一个元素的索引就是 1...... 字符串的长度则是其中的元素(即16位值)的数量。空字符串的长度为零,因此不包含任何元素。

在 ECMAScript 操作解释 String 的值时,每个元素都会被解释为单个 UTF-16 编码单元。ECMAScript 不对 String 值中的编码单元序列施加任何限制或要求,因此,当解释为 UTF-16 编码代码序列时,它们可能不规范(ill-formed)。那些不解释的字符串内容的操作就会将它们一致的视为 16 位无符号整数序列。String.prototype.normalize 函数(见 21.1.3.12 )可被用于使字符串的值显式地标准化操作。String.prototype.localeCompare(见 21.1.3.10 )会在内部标准化字符串的值,但是没有其他操作隐式地规范化它们操作的字符串。只有明确指定为语言或区域设置敏感的操作才会产生对语言敏感的操作字符串进行结果化处理。

注意:这个设计背后的理由是保持字符串的实现尽可能简单和高性能。 如果 ECMAScript 源文本是标准化表单C,则字符串字面值也保证也被规范化,只要它们不包含任何 Unicode 转义序列。

一些操作将字符串内容解释为 UTF-16 编码的 Unicode 代码点。 在这种情况下,解释是这样的:

  • 在 0 到 0xD7FF 范围内或在 0xE000 到 0xFFFF 范围内的代码单元被解释为具有相同值的代码点。

  • 两个代码单元的序列(其中第一代码单元 c1 在 0xD800 到 0xDBFF 的范围内,第二代码单元 c2 在 0xDC00 到 0xDFFF 的范围内),是 surrogate pair 的一部分,并被解释为(c1 - 0xD800)× 0x400 +(c2-0xDC00)+ 0x10000 的值(见10.1.2)。

  • 在 0xD800 到 0xDFFF 范围内但不是 surrogate pair(UTF-16中用于扩展字符而使用的编码方式,是一种采用四个字节(两个UTF-16编码)来表示一个字符) 的一部分的代码单元被解释为具有相同值的代码点。

results matching ""

    No results matching ""