--- title: String slug: Web/JavaScript/Reference/Global_Objects/String tags: - ECMAScript 2015 - JavaScript - String - Довідка - рядок translation_of: Web/JavaScript/Reference/Global_Objects/String ---
Глобальний об'єкт String
є конструктором для рядків, або послідовностей символів.
Рядки корисні для утримання данних, які можуть бути представлені в текстовій формі. Деякі з найбільш виконуваних операцій над рядками: перевірка їхньої {{jsxref("String.length", "довжини")}}, побудова та об'єднання рядків за допомогою рядкових операторів + та +=, перевірка наявності чи розташування підрядків методом {{jsxref("String.prototype.indexOf()", "indexOf()")}} чи копіювання підрядків методом {{jsxref("String.prototype.substring()", "substring()")}}.
Рядки можна створювати як примітиви, з рядкових літералів, або як об'єкти, використовуючи конструктор {{jsxref("String/String")}}:
const string1 = "Рядковий примітив"; const string2 = 'Теж рядковий примітив'; const string3 = `І ще один рядковий примітив`; const string4 = new String("Об'єкт String");
Рядкові примітиви та рядкові об'єкти можна взаємно замінювати у більшості ситуацій. Дивіться нижче "Рядкові примітиви та рядкові об'єкти".
Рядкові літерали можуть створюватись з використанням одинарних чи подвійних лапок, які працюють ідентично, або за допомогою зворотніх лапок `. Ця остання форма створює шаблонний літерал: ця форма дозволяє інтерполювати вирази.
Існують два способи доступу до окремих символів рядка. Перший - це метод {{jsxref("String.prototype.charAt()", "charAt()")}}:
return 'кіт'.charAt(1); // вертає "і"
Другий спосіб (запроваджений у ECMAScript 5) працює з рядком як з подібним до масиву об'єктом, де окремі символи відповідають числовому індексу:
return 'кіт'[1]; // вертає "і"
Під час звернення до символу за допомогою дужкової нотації спроби видалити ці властивості чи присвоїти їм значення не матимуть успіху. Ці властивості не є доступними ані для запису, ані для налаштування. (Дивіться більше інформації у {{jsxref("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 + ' є рівними.'); }
Схожий результат можна отримати за допомогою методу {{jsxref("String.prototype.localeCompare()", "localeCompare()")}}, що успадковується екземплярами String
.
Зауважте, що a == b
перевіряє рядки у a
та b
на рівність у звичайний чутливий до регістру спосіб. Якщо вам потрібно порівняння літер без врахування регістру, використовуйте функцію, схожу на цю:
function isEqual(str1, str2) { return str1.toUpperCase() === str2.toUpperCase() } // isEqual
Верхній регістр використовується замість нижнього в цій функції через деякі проблеми з перетвореннями символів у UTF-8.
Зауважте, що JavaScript розрізняє об'єкти String
та примітивні рядкові значення. (Те саме стосується типу {{jsxref("Boolean")}} та {{jsxref("Global_Objects/Число", "чисел")}}.)
Рядкові літерали (позначаються подвійними чи одинарними лапками) та рядки, повернені викликами String
не в контексті конструктора (тобто, без використання ключового слова {{jsxref("Operators/new", "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
також дають різні результати при використанні {{jsxref("Global_Objects/eval", "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
завжди можна перетворити на його примітивний аналог методом {{jsxref("String.prototype.valueOf()", "valueOf()")}}.
console.log(eval(s2.valueOf())); // вертає число 4
Спеціальні символи можна позначати за допомогою екранування:
Код | Результат |
---|---|
\XXX (де XXX - це 1–3 вісімкових цифр; діапазон 0 –377 ) |
Символ ISO-8859-1 / код символа Юнікоду між U+0000 та U+00FF |
\' |
одинарні лапки |
\" |
подвійні лапки |
\\ |
зворотній слеш |
\n |
новий рядок |
\r |
повернення каретки |
\v |
вертикальна табуляція |
\t |
горизонтальна табуляція |
\b |
повернення на крок |
\f |
зміна сторінки |
\uXXXX (де XXXX - це 4 шістнадцяткових символа; діапазон 0x0000 –0xFFFF ) |
Кодова одиниця UTF-16 / код символа Юнікоду між U+0000 та U+FFFF |
\u{X} ... \u{XXXXXX} (де X…XXXXXX - це 1–6 шістнадцяткових символів; діапазон 0x0 –0x10FFFF ) |
Кодова одиниця UTF-32 / код символа Юнікоду між U+0000 та U+10FFFF |
\xXX (де XX - це 2 шістнадцяткові символи; діапазон 0x00 –0xFF ) |
символ ISO-8859-1 / код символа Юнікоду між U+0000 та U+00FF |
Іноді ваш код міститиме рядки, які є дуже довгими. Замість того, щоб створювати рядки нескінченно довгі чи перенесені за примхою редактора, ви можете самостійно розбити текст на декілька рядків у коді, не вплинувши на реальний вміст літералу. Існує два способи це зробити.
Ви можете скористатись оператором + для поєднання багатьох рядків, ось так:
let longString = "Це дуже довгий текст, його треба " + "записати в декілька рядків," + "інакше мій код буде важко читати."
Ви можете скористатись символом зворотній слеш (\
) в кінці кожного рядка, щоб позначити, що текст продовжується на наступному рядку. Переконайтесь, що після зворотнього слеша немає пробілу чи будь-якого іншого символу (окрім символу розриву рядка), або відступу; інакше, це не спрацює.
Ця форма виглядає ось так:
let longString = "Це дуже довгий текст, його треба \ записати в декілька рядків, \ інакше мій код буде важко читати."
Обидва наведені методи виводять ідентичні рядки.
String
. Він виконує перетворення типів, коли викликається як функція, а не як конструктор, що, зазвичай, більш корисно.index
.index
.pos
.searchString
.searchString
.searchValue
, або -1
, якщо воно не знайдене.searchValue
, або -1
, якщо значення не знайдене.compareString
перед, після, чи однаково, відносно наданого рядка у відсованій послідовності.regexp
з рядком.targetLength
.targetLength
.count
разів.searchFor
заміною replaceWith
. searchFor
може бути рядком або регулярним виразом, а replaceWith
може бути рядком чи функцією.searchFor
заміною replaceWith
. searchFor
може бути рядком або регулярним виразом, а replaceWith
може бути рядком або функцією.regexp
та рядком, що викликав метод.sep
.searchString
.Символи рядка переводяться до нижнього регістра відповідно до поточних регіональних налаштувань.
Для більшості мов результат буде такий самий, як у {{jsxref("String.prototype.toLowerCase()", "toLowerCase()")}}.
Символи рядка переводяться до верхнього регістра відповідно до поточних регіональних налаштувань.
Для більшості мов результат буде такий самий, як у {{jsxref("String.prototype.toUpperCase()", "toUpperCase()")}}.
Iterator
, який перебирає коди символів рядка, повертаючи кожний код символа рядкового значення.Застарілі. Уникайте цих методів.
Вони обмежено використовуються, оскільки надають набір доступних тегів та атрибутів HTML.
Можливо використовувати String
як більш надійну альтернативу {{jsxref("String.prototype.toString()", "toString()")}}, оскільки вона працює при використанні з {{jsxref("null")}}, {{jsxref("undefined")}} та {{jsxref("Symbol", "символами")}}. Наприклад:
var outputStrings = []; for (let i = 0, n = inputValues.length; i < n; ++i) { outputStrings.push(String(inputValues[i])); }
Специфікація |
---|
{{SpecName('ESDraft', '#sec-string-objects', 'String')}} |
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
{{Compat("javascript.builtins.String.String")}}
StringView
— C-подібне відображення рядків на основі типизованих масивів