字符串:length
length
是 String
值的一个数据属性,它包含字符串中 UTF-16 代码单元的长度。
试一试
值
一个非负整数。
String: length 的属性 |
|
---|---|
可写 | 否 |
可枚举 | 否 |
可配置 | 否 |
描述
此属性返回字符串中代码单元的数量。JavaScript 使用 UTF-16 编码,其中每个 Unicode 字符可以编码为一个或两个代码单元,因此 length
返回的值可能与字符串中 Unicode 字符的实际数量不匹配。对于拉丁语、西里尔语、众所周知的 CJK 字符等常用脚本,这应该不是问题,但如果您正在处理某些脚本,例如表情符号、数学符号 或罕见的汉字,您可能需要考虑代码单元和字符之间的差异。
语言规范要求字符串的最大长度为 253 - 1 个元素,这是 精确整数 的上限。但是,长度为该值的字符串需要 16384TiB 的存储空间,这无法容纳在任何合理设备的内存中,因此实现往往会降低阈值,这使得字符串的长度可以方便地存储在 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。字符串的大小可能与源文件的大小不同。
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
函数的 元数(大致来说,它具有的正式参数的数量),为 1。
由于 length
统计的是代码单元而不是字符,如果您想获取字符数量,您可以先使用其 迭代器 拆分字符串,该迭代器按字符迭代
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
对象以获取长度
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
示例
基本用法
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
长度不等于字符数的字符串
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
属性赋值不会产生任何可观察到的效果,并且会在 严格模式 中抛出异常。
const myString = "bluebells";
myString.length = 4;
console.log(myString); // "bluebells"
console.log(myString.length); // 9
规范
规范 |
---|
ECMAScript 语言规范 # sec-properties-of-string-instances-length |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。