String

Глобальний об'єкт String є конструктором для рядків, або послідовностей символів.

Опис

Рядки корисні для утримання данних, які можуть бути представлені в текстовій формі. Деякі з найбільш виконуваних операцій над рядками: перевірка їхньої довжини, побудова та об'єднання рядків за допомогою рядкових операторів + та +=, перевірка наявності чи розташування підрядків методом indexOf() чи копіювання підрядків методом substring().

Створення рядків

Рядки можна створювати як примітиви, з рядкових літералів, або як об'єкти, використовуючи конструктор String/String:

const string1 = "Рядковий примітив";
const string2 = 'Теж рядковий примітив';
const string3 = `І ще один рядковий примітив`;

const string4 = new String("Об'єкт String");

Рядкові примітиви та рядкові об'єкти можна взаємно замінювати у більшості ситуацій. Дивіться нижче "Рядкові примітиви та рядкові об'єкти".

Рядкові літерали можуть створюватись з використанням одинарних чи подвійних лапок, які працюють ідентично, або за допомогою зворотніх лапок `. Ця остання форма створює шаблонний літерал: ця форма дозволяє інтерполювати вирази.

Доступ до символів

Існують два способи доступу до окремих символів рядка. Перший - це метод charAt():

return 'кіт'.charAt(1); // вертає "і"

Другий спосіб (запроваджений у ECMAScript 5) працює з рядком як з подібним до масиву об'єктом, де окремі символи відповідають числовому індексу:

return 'кіт'[1]; // вертає "і"

Під час звернення до символу за допомогою дужкової нотації спроби видалити ці властивості чи присвоїти їм значення не матимуть успіху. Ці властивості не є доступними ані для запису, ані для налаштування. (Дивіться більше інформації у Object.defineProperty().)

Порівняння рядків

У мові C для порівняння рядків використовується функція strcmp(). У JavaScript ви просто використовуєте оператори менше ніж та більше ніж:

var a = 'а';
var b = 'б';
if (a < b) { // true
  console.log(a + ' менше ніж ' + b);
} else if (a > b) {
  console.log(a + ' більше ніж ' + b);
} else {
  console.log(a + ' та ' + b + ' є рівними.');
}

Схожий результат можна отримати за допомогою методу localeCompare(), що успадковується екземплярами String.

Зауважте, що a == b перевіряє рядки у a та b на рівність у звичайний чутливий до регістру спосіб. Якщо вам потрібно порівняння літер без врахування регістру, використовуйте функцію, схожу на цю:

function isEqual(str1, str2)
{
    return str1.toUpperCase() === str2.toUpperCase()
} // isEqual

Верхній регістр використовується замість нижнього в цій функції через деякі проблеми з перетвореннями символів у UTF-8.

Рядкові примітиви та рядкові об'єкти

Зауважте, що JavaScript розрізняє об'єкти String та примітивні рядкові значення. (Те саме стосується типу Boolean та чисел.)

Рядкові літерали (позначаються подвійними чи одинарними лапками) та рядки, повернені викликами String не в контексті конструктора (тобто, без використання ключового слова new) є примітивними рядками. JavaScript автоматично перетворює примітиви на об'єкти String, тому методи об'єкта String можливо використовувати на примітивних рядках. Там, де на примітивному рядку має бути викликаний метод або зустрічається звернення до властивості, JavaScript автоматично загорне рядковий примітив та викличе метод чи виконає звернення до властивості.

var s_prim = 'няв';
var s_obj = new String(s_prim);

console.log(typeof s_prim); // Виведе "string"
console.log(typeof s_obj);  // Виведе "object"

Рядкові примітиви та об'єкти String також дають різні результати при використанні eval(). Примітиви, передані у eval, сприймаються як першокод; об'єкти String поводяться як усі об'єкти, повертаючи об'єкт. Наприклад:

var s1 = '2 + 2';             // створює рядковий примітив
var s2 = new String('2 + 2'); // створює об'єкт String
console.log(eval(s1));        // повертає число 4
console.log(eval(s2));        // повертає рядок "2 + 2"

Через це може статись помилка, якщо код зустрічає об'єкт String там, де очікує рядковий примітив, хоча, загалом, розробникам не потрібно хвилюватись щодо відмінностей.

Об'єкт String завжди можна перетворити на його примітивний аналог методом valueOf().

console.log(eval(s2.valueOf())); // вертає число 4

Екранування

Спеціальні символи можна позначати за допомогою екранування:

Код Результат
\XXX
(де XXX - це 1–3 вісімкових цифр; діапазон 0377)
Символ ISO-8859-1 / код символа Юнікоду між U+0000 та U+00FF
\' одинарні лапки
\" подвійні лапки
\\ зворотній слеш
\n новий рядок
\r повернення каретки
\v вертикальна табуляція
\t горизонтальна табуляція
\b повернення на крок
\f зміна сторінки
\uXXXX (де XXXX - це 4 шістнадцяткових символа; діапазон 0x00000xFFFF) Кодова одиниця UTF-16 / код символа Юнікоду між U+0000 та U+FFFF
\u{X} ... \u{XXXXXX}
(де XXXXXXX - це 1–6 шістнадцяткових символів; діапазон 0x00x10FFFF)
Кодова одиниця UTF-32 / код символа Юнікоду між U+0000 та U+10FFFF
\xXX
(де XX - це 2 шістнадцяткові символи; діапазон 0x000xFF)
символ ISO-8859-1 / код символа Юнікоду між U+0000 та U+00FF

Довгі рядкові літерали

Іноді ваш код міститиме рядки, які є дуже довгими. Замість того, щоб створювати рядки нескінченно довгі чи перенесені за примхою редактора, ви можете самостійно розбити текст на декілька рядків у коді, не вплинувши на реальний вміст літералу. Існує два способи це зробити.

Метод 1

Ви можете скористатись оператором + для поєднання багатьох рядків, ось так:

let longString = "Це дуже довгий текст, його треба " +
                 "записати в декілька рядків," +
                 "інакше мій код буде важко читати."

Метод 2

Ви можете скористатись символом зворотній слеш (\) в кінці кожного рядка, щоб позначити, що текст продовжується на наступному рядку. Переконайтесь, що після зворотнього слеша немає пробілу чи будь-якого іншого символу (окрім символу розриву рядка), або відступу; інакше, це не спрацює.

Ця форма виглядає ось так:

let longString = "Це дуже довгий текст, його треба \
записати в декілька рядків, \
інакше мій код буде важко читати."

Обидва наведені методи виводять ідентичні рядки.

Конструктор

String()
Створює новий об'єкт String. Він виконує перетворення типів, коли викликається як функція, а не як конструктор, що, зазвичай, більш корисно.

Статичні методи

String.fromCharCode(num1 [, ...[, numN]])
Вертає рядок, створений за допомогою вказаної послідовності значень Юнікоду.
String.fromCodePoint(num1 [, ...[, numN)
Вертає рядок, створений за допомогою вказаної послідовності кодів символів.
String.raw()
Вертає рядок, створений з сирого шаблонного рядка.

Властивості екземплярів

String.prototype.length
Відображає довжину рядка. Доступна лише для читання.

Методи екземплярів

String.prototype.charAt(index)
Вертає символ (рівно одну кодову одиницю UTF-16), розташований за вказаним індексом index.
String.prototype.charCodeAt(index)
Вертає число, яке є значенням кодової одиниці UTF-16, розташованої за вказаним індексом index.
String.prototype.codePointAt(pos)
Вертає невід'ємне ціле число, яке є значенням коду символу UTF-16, що починається на вказаній позиції pos.
String.prototype.concat(str [, ...strN ])
Об'єднує текст двох (або більше) рядків та повертає новий рядок.
String.prototype.includes(searchString [, position])
Визначає, чи містить рядок, що викликав метод, рядок searchString.
String.prototype.endsWith(searchString [, length])
Визначає, чи завершується рядок символами рядка searchString.
String.prototype.indexOf(searchValue [, fromIndex])
Вертає індекс всередині об'єкта String, що викликав метод, першого знайденого значення searchValue, або -1, якщо воно не знайдене.
String.prototype.lastIndexOf(searchValue [, fromIndex])
Вертає індекс всередині об'єкта String, що викликав метод, останнього знайденого значення searchValue, або -1, якщо значення не знайдене.
String.prototype.localeCompare(compareString [, locales [, options]])
Вертає число, що вказує, чи розташований рядок compareString перед, після, чи однаково, відносно наданого рядка у відсованій послідовності.
String.prototype.match(regexp)
Використовується, щоб зіставити регулярний вираз regexp з рядком.
String.prototype.matchAll(regexp)
Вертає ітератор усіх збігів з регулярним виразом.
String.prototype.normalize([form])
Вертає рядкове значення, на якому викликано метод, у формі нормалізації Юнікоду.
String.prototype.padEnd(targetLength [, padString])
Доповнює поточний рядок наданим рядком з кінця та повертає новий рядок, що має довжину targetLength.
String.prototype.padStart(targetLength [, padString])
Доповнює поточний рядок наданим рядком з початку та повертає новий рядок, що має довжину targetLength.
String.prototype.repeat(count)
Повертає рядок, що складається з елементів об'єкта, повторених count разів.
String.prototype.replace(searchForreplaceWith)
Використовується, щоб замінити searchFor заміною replaceWith. searchFor може бути рядком або регулярним виразом, а replaceWith може бути рядком чи функцією.
String.prototype.replaceAll(searchForreplaceWith)
Використовується, щоб замінити усі збіги з шаблоном searchFor заміною replaceWithsearchFor може бути рядком або регулярним виразом, а replaceWith може бути рядком або функцією.
String.prototype.search(regexp)
Шукає збіг між регулярним виразом regexp та рядком, що викликав метод.
String.prototype.slice(beginIndex[, endIndex])
Вирізає частину рядка та повертає новий рядок.
String.prototype.split([sep [, limit] ])
Вертає масив рядків, заповнених розділенням початкового рядка підрядком sep.
String.prototype.startsWith(searchString [, length])
Визначає, чи починається рядок з символів рядка searchString.
String.prototype.substr()
Повертає вказану кільксть символів на початку рядка з вказаної позиції.
String.prototype.substring(indexStart [, indexEnd])
Повертає рядок, що містить символи рядка від вказаного індекса, або між вказаними індексами.
String.prototype.toLocaleLowerCase( [locale, ...locales])

Символи рядка переводяться до нижнього регістра відповідно до поточних регіональних налаштувань.

Для більшості мов результат буде такий самий, як у toLowerCase().

String.prototype.toLocaleUpperCase( [locale, ...locales])

Символи рядка переводяться до верхнього регістра відповідно до поточних регіональних налаштувань.

Для більшості мов результат буде такий самий, як у toUpperCase().

String.prototype.toLowerCase()
Повертає значення рядка, переведене до нижнього регістра.
String.prototype.toString()
Повертає рядкове представлення вказаного об'єкта. Заміщує метод Object.prototype.toString().
String.prototype.toUpperCase()
Повертає значення рядка, переведене до верхнього регістра.
String.prototype.trim()
Прибирає пробіли з початку та кінця рядка. Частина стандарту ECMAScript 5.
String.prototype.trimStart()
Видаляє пробіли з початку рядка.
String.prototype.trimEnd()
Видаляє пробіли з кінця рядка.
String.prototype.valueOf()
Повертає просту величину вказаного об'єкта. Заміщує метод Object.prototype.valueOf().
String.prototype.@@iterator()
Повертає новий об'єкт Iterator, який перебирає коди символів рядка, повертаючи кожний код символа рядкового значення.

Методи HTML-обгортки

Застарілі. Уникайте цих методів.

Вони обмежено використовуються, оскільки надають набір доступних тегів та атрибутів HTML.

String.prototype.anchor()
<a name="name"> (гіпертекстове посилання)
String.prototype.big()
<big>
String.prototype.blink()
<blink>
String.prototype.bold()
<b>
String.prototype.fixed()
<tt>
String.prototype.fontcolor()
<font color="color">
String.prototype.fontsize()
<font size="size">
String.prototype.italics()
<i>
String.prototype.link()
<a href="url"> (посилання на URL)
String.prototype.small()
<small>
String.prototype.strike()
<strike>
String.prototype.sub()
<sub>
String.prototype.sup()
<sup>

Приклади

Перетворення рядка

Можливо використовувати String як більш надійну альтернативу toString(), оскільки вона працює при використанні з null, undefined та символами. Наприклад:

var outputStrings = [];
for (let i = 0, n = inputValues.length; i < n; ++i) {
  outputStrings.push(String(inputValues[i]));
}

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

Специфікація
ECMAScript (ECMA-262)
The definition of 'String' in that specification.

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
String() constructorChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support 3Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100

Legend

Full support  
Full support

Див. також