字串:length
String 值的 length 資料屬性包含字串在 UTF-16 編碼中的長度(以碼元為單位)。
試一試
const str = "Life, the universe and everything. Answer:";
console.log(`${str} ${str.length}`);
// Expected output: "Life, the universe and everything. Answer: 42"
值
一個非負整數。
String: length 的屬性特性 | |
|---|---|
| 可寫 | 否 |
| 可列舉 | 否 |
| 可配置 | 否 |
描述
此屬性返回字串中的碼元數量。JavaScript 使用 UTF-16 編碼,其中每個 Unicode 字元可能編碼為一個或兩個碼元。因此,length 返回的值可能與字串中實際的 Unicode 字元數不符。對於拉丁字母、西裡爾字母、常見的 CJK 字元等通用指令碼,這通常不是問題。但如果您處理某些指令碼,例如表情符號、數學符號或不常見的漢字,則需要考慮碼元和字元之間的差異。
語言規範要求字串的最大長度為 253 - 1 個元素,這是 精確整數的上限。但是,具有此長度的字串需要 16384PiB 的儲存空間,這在任何合理裝置的記憶體中都無法容納。因此,實現通常會降低閾值,以便字串的長度可以方便地儲存在 32 位整數中。
- 在 V8(Chrome 和 Node 使用)中,最大長度為 229 - 24(約 1GiB)。在 32 位系統上,最大長度為 228 - 16(約 512MiB)。
- 在 Firefox 中,最大長度為 230 - 2(約 2GiB)。在 Firefox 65 之前,最大長度為 228 - 1(約 512MiB)。
- 在 Safari 中,最大長度為 231 - 1(約 4GiB)。
如果您正在處理其他編碼(如 UTF-8 檔案或 blob)的大型字串,請注意,當您將資料載入到 JS 字串時,編碼始終會轉換為 UTF-16。字串的大小可能與原始檔的大小不同。
js
const str1 = "a".repeat(2 ** 29 - 24); // Success
const str2 = "a".repeat(2 ** 29 - 23); // RangeError: Invalid string length
const buffer = new Uint8Array(2 ** 29 - 24).fill("a".codePointAt(0)); // This buffer is 512MiB in size
const str = new TextDecoder().decode(buffer); // This string is 1GiB in size
對於空字串,length 為 0。
靜態屬性 String.length 與字串的長度無關。它表示 String 函式的 arity(大致表示其形式引數的數量),該值為 1。
由於 length 計算的是碼元而不是字元,因此如果您想獲取字元數,可以先使用字串的 迭代器進行分割,該迭代器按字元進行迭代。
js
function getCharacterLength(str) {
// The string iterator that is used here iterates over characters,
// not mere code units
return [...str].length;
}
console.log(getCharacterLength("A\uD87E\uDC04Z")); // 3
如果您想按字形簇計數,請使用 Intl.Segmenter。您可以先將要分割的字串傳遞給 segment() 方法,然後遍歷返回的 Segments 物件來獲取長度。
js
function getGraphemeCount(str) {
const segmenter = new Intl.Segmenter("en-US", { granularity: "grapheme" });
// The Segments object iterator that is used here iterates over characters in grapheme clusters,
// which may consist of multiple Unicode characters
return [...segmenter.segment(str)].length;
}
console.log(getGraphemeCount("👨👩👧👧")); // 1
示例
基本用法
js
const x = "Mozilla";
const empty = "";
console.log(`${x} is ${x.length} code units long`);
// Mozilla is 7 code units long
console.log(`The empty string has a length of ${empty.length}`);
// The empty string has a length of 0
長度不等於字元數的字串
js
const emoji = "😄";
console.log(emoji.length); // 2
console.log([...emoji].length); // 1
const adlam = "𞤲𞥋𞤣𞤫";
console.log(adlam.length); // 8
console.log([...adlam].length); // 4
const formula = "∀𝑥∈ℝ,𝑥²≥0";
console.log(formula.length); // 11
console.log([...formula].length); // 9
賦值給 length
由於字串是原始型別,嘗試為字串的 length 屬性賦值不會產生可觀察到的效果,並且在 嚴格模式下會丟擲錯誤。
js
const myString = "bluebells";
myString.length = 4;
console.log(myString); // "bluebells"
console.log(myString.length); // 9
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-properties-of-string-instances-length |
瀏覽器相容性
載入中…