字符串:length

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

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

浏览器兼容性

另见