String.fromCharCode()

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

String.fromCharCode() 靜態方法根據指定的 UTF-16 碼單元序列返回一個字串。

試一試

console.log(String.fromCharCode(189, 43, 190, 61));
// Expected output: "½+¾="

語法

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

引數

num1, …, numN

一個介於 0655350xFFFF)之間的數字,表示一個 UTF-16 碼單元。大於 0xFFFF 的數字將被截斷為最後 16 位。不會執行有效性檢查。

返回值

一個長度為 N 的字串,由指定的 N 個 UTF-16 碼單元組成。

描述

因為 fromCharCode()String 的一個靜態方法,所以你總是使用 String.fromCharCode() 來呼叫它,而不是作為一個你建立的 String 值的例項方法來呼叫。

Unicode 碼點範圍從 011141110x10FFFF)。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)與表示它的兩個代理值(例如 0xd83c0xdf03)之間存在數學關係,但在每次使用增補碼點時,都需要額外一步來計算或查詢代理對值。因此,使用 String.fromCodePoint() 更為方便,它允許根據增補字元的實際碼點值來返回它們。例如,String.fromCodePoint(0x1f303) 返回碼點 U+1F303 "Night with Stars"。

示例

使用 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® 2026 語言規範
# sec-string.fromcharcode

瀏覽器相容性

另見