String.fromCharCode()

String.fromCharCode() 静态方法返回一个由指定的 UTF-16 代码单元序列创建的字符串。

试一试

语法

js
String.fromCharCode()
String.fromCharCode(num1)
String.fromCharCode(num1, num2)
String.fromCharCode(num1, num2, /* …, */ numN)

参数

num1,…,numN

一个介于 065535 (0xFFFF) 之间的数字,表示一个 UTF-16 代码单元。大于 0xFFFF 的数字将截断为最后 16 位。不执行有效性检查。

返回值

一个长度为 N 的字符串,由 N 个指定的 UTF-16 代码单元组成。

描述

因为 fromCharCode()String 的静态方法,所以您始终将其用作 String.fromCharCode(),而不是用作您创建的 String 值的方法。

Unicode 代码点范围从 01114111 (0x10FFFF)。charCodeAt() 始终返回一个小于 65536 的值,因为较高的代码点由一对 16 位代理伪字符表示。因此,为了生成值大于 65535 的完整字符,必须提供两个代码单元(就像操作包含两个字符的字符串一样)。有关 Unicode 的信息,请参阅 UTF-16 字符、Unicode 代码点和音节簇

因为 fromCharCode() 仅适用于 16 位值(与 \u 转义序列相同),所以需要使用代理对才能返回补充字符。例如,String.fromCharCode(0xd83c, 0xdf03)"\ud83c\udf03" 都返回代码点 U+1F303“星空之夜”。虽然补充代码点值(例如 0x1f303)与表示它的两个代理值(例如 0xd83c0xdf03)之间存在数学关系,但每次使用补充代码点时,都需要额外的步骤来计算或查找代理对值。因此,使用 String.fromCodePoint() 更方便,它允许根据实际代码点值返回补充字符。例如,String.fromCodePoint(0x1f303) 返回代码点 U+1F303“星空之夜”。

示例

使用 fromCharCode()

BMP 字符在 UTF-16 中使用单个代码单元

js
String.fromCharCode(65, 66, 67); // returns "ABC"
String.fromCharCode(0x2014); // returns "—"
String.fromCharCode(0x12014); // also returns "—"; the digit 1 is truncated and ignored
String.fromCharCode(8212); // also returns "—"; 8212 is the decimal form of 0x2014

补充字符在 UTF-16 中需要两个代码单元(即代理对)

js
String.fromCharCode(0xd83c, 0xdf03); // Code Point U+1F303 "Night with
String.fromCharCode(55356, 57091); // Stars" === "\uD83C\uDF03"

String.fromCharCode(0xd834, 0xdf06, 0x61, 0xd834, 0xdf07); // "\uD834\uDF06a\uD834\uDF07"

规范

规范
ECMAScript 语言规范
# sec-string.fromcharcode

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅