Строка: длина
Базовая версия Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с июля 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
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
Смотрите также
© 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