String: length
Властивість даних значень String
length
(довжина) містить довжину рядка в кодових одиницях UTF-16.
Спробуйте його в дії
Значення
Невід'ємне ціле число.
Атрибути властивості String: length |
|
---|---|
Записна | ні |
Перелічувана | ні |
Конфігуровна | ні |
Опис
Ця властивість повертає число кодових одиниць у рядку. JavaScript використовує кодування UTF-16, згідно з яким кожен символ Unicode може бути закодований у вигляді однієї або двох кодових одиниць, тож може статись таке, що значення, повернене length
, не збігатиметься з фактичним числом символів Unicode у ряду. Для поширених систем письма штибу латиниці, кирилиці, загальновідомих китайських, японських і корейських символів тощо це не повинно бути проблемою, але при роботі з певними писемностями, як то емоджі, математичними символами або маловідомими китайськими символами, може знадобитись враховування різниці між кодовими одиницями та символами.
Специфікація мови вимагає, аби рядки мали найбільшу можливу довжину 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).
В порожнього рядка довжина length
дорівнює 0.
Статична властивість String.length
не має жодного відношення до довжин рядків. Це арність функції String
(в широкому розумінні — число формальних аргументів функції), яка дорівнює 1.
Оскільки довжина length
рахує кодові одиниці, а не символи, то якщо необхідно отримати саме кількість символів, можна спершу розбити рядок за допомогою його ітератора, що працює за символами:
function getCharacterLength(str) {
// Ітератор рядка, який вжито тут, перебирає саме окремі символи,
// а не лише кодові одиниці
return [...str].length;
}
console.log(getCharacterLength("А\uD87E\uDC04Я")); // 3
Приклади
Базове застосування
const x = "Mozilla";
const empty = "";
console.log(`${x} має довжину ${x.length} кодових одиниць`);
// "Mozilla має довжину 7 кодових одиниць"
console.log(`Порожній рядок має довжину ${empty.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 = "дзвоники";
myString.length = 4;
console.log(myString); // "дзвоники"
console.log(myString.length); // 8
Специфікації
Специфікація |
---|
ECMAScript Language Specification (ECMAScript) # sec-properties-of-string-instances-length |
Сумісність із браузерами
desktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
length
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |