String.fromCharCode()
String.fromCharCode() 静态方法根据指定的 UTF-16 码单元序列返回一个字符串。
试一试
console.log(String.fromCharCode(189, 43, 190, 61));
// Expected output: "½+¾="
语法
String.fromCharCode()
String.fromCharCode(num1)
String.fromCharCode(num1, num2)
String.fromCharCode(num1, num2, /* …, */ numN)
参数
num1, …,numN-
一个介于
0和65535(0xFFFF)之间的数字,表示一个 UTF-16 码单元。大于0xFFFF的数字将被截断为最后 16 位。不会执行有效性检查。
返回值
一个长度为 N 的字符串,由指定的 N 个 UTF-16 码单元组成。
描述
因为 fromCharCode() 是 String 的一个静态方法,所以你总是使用 String.fromCharCode() 来调用它,而不是作为一个你创建的 String 值的实例方法来调用。
Unicode 码点范围从 0 到 1114111(0x10FFFF)。charCodeAt() 总是返回一个小于 65536 的值,因为较高的码点由一对 16 位代理码元(pseudo-characters)表示。因此,为了生成值大于 65535 的完整字符,需要提供两个码单元(就像操作一个有两个字符的字符串一样)。关于 Unicode 的信息,请参见 UTF-16 字符、Unicode 码点和字素簇。
因为 fromCharCode() 只处理 16 位值(与 `\u` 转义序列相同),所以需要一个代理对才能返回一个增补字符。例如,String.fromCharCode(0xd83c, 0xdf03) 和 "\ud83c\udf03" 都返回码点 U+1F303 "Night with Stars"。虽然增补码点值(例如 0x1f303)与表示它的两个代理值(例如 0xd83c 和 0xdf03)之间存在数学关系,但在每次使用增补码点时,都需要额外一步来计算或查找代理对值。因此,使用 String.fromCodePoint() 更为方便,它允许根据增补字符的实际码点值来返回它们。例如,String.fromCodePoint(0x1f303) 返回码点 U+1F303 "Night with Stars"。
示例
使用 fromCharCode()
基本多文种平面(BMP)字符在 UTF-16 中使用单个码单元
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 中需要两个码单元(即代理对)
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® 2026 语言规范 # sec-string.fromcharcode |
浏览器兼容性
加载中…