String:length
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
String
类型的 length
数据属性表示字符串的 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)。
对于空字符串,length
为 0。
静态属性 String.length
与字符串的长度无关。它是 String
函数的参数数量(简单地说,就是它有多少个形参),也就是 1。
由于 length
统计的是码元而不是字符,如果你想得到字符的数量,你可以首先用它的迭代器分割字符串,它按字符进行迭代:
function getCharacterLength(str) {
// 这里使用的字符串迭代器遍历的是字符,而不仅仅是码元
return [...str].length;
}
console.log(getCharacterLength("A\uD87E\uDC04Z")); // 3
示例
基本用法
const x = "Mozilla";
const empty = "";
console.log(`${x} 有 ${x.length} 个码元`);
// Mozilla 有 7 个码元
console.log(`空字符串的 length 为 ${empty.length}`);
// 空字符串的 length 为 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
属性赋值没有可观察到的效果,并且在严格模式下会抛出错误。
const myString = "bluebells";
myString.length = 4;
console.log(myString); // "bluebells"
console.log(myString.length); // 9
规范
Specification |
---|
ECMAScript Language Specification # sec-properties-of-string-instances-length |
浏览器兼容性
BCD tables only load in the browser