Spec-Zone.ru › JavaScript

Строка: длина

Базовая версия Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Свойство данных length значения String содержит длину строки в кодовых единицах 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 элементов, что является верхним пределом для точных целых чисел. Однако строке такой длины требуется 16384 ТиБ памяти, что не может поместиться в память любого разумного устройства, поэтому реализации склонны снижать порог, что позволяет удобно хранить длину строки в 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-16, что может быть завышенной оценкой. Фактическое пространство, используемое строкой, зависит от оптимизаций движка JavaScript, и все основные движки используют более компактное внутреннее представление, например, однобайтовое хранилище, для строк, содержащих только символы Latin-1.

Если вы работаете с большими строками в других кодировках (например, файлами UTF-8 или блобами), обратите внимание, что при загрузке данных в строку 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 unless optimized

Для пустой строки, 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

Если вы хотите посчитать символы по графемам (grapheme clusters), используйте 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 строки не имеет наблюдаемого эффекта и вызовет исключение в строгом режиме.

const myString = "bluebells";

myString.length = 4;
console.log(myString); // "bluebells"
console.log(myString.length); // 9

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-properties-of-string-instances-length

Совместимость с браузерами

Десктопные Мобильные Серверные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
length
1
12
1
3
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

Смотрите также

  • Array: length

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API