String.raw()

Статичний метод String.raw() — це тегова функція шаблонних літералів. Вона подібна до префіксу r в Python, або префіксу @ в C# для рядкових літералів. (Проте вони не ідентичні; пояснення в цьому обговоренні (англ.).) Вона використовується для отримання необроблених рядкових форм шаблонних літералів — тобто таких, в яких опрацьовані вирази підставлення (наприклад ${foo}), а екрановані послідовності (зокрема \n) — ні.

Спробуйте його в дії

Синтаксис

String.raw(callSite, ...substitutions)

String.raw`templateString`

Параметри

callSite

Сформований об'єкт виклику шаблонної функції, як от { raw: ['foo', 'bar', 'baz'] }.

...substitutions

Містить значення для підставлення.

templateString

Шаблонний літерал; може містити (необов'язково) вирази підставлення (${...}).

Повернене значення

Необроблена рядкова форма переданого шаблонного літерала.

Винятки

TypeError

Викидається TypeError, якщо перший аргумент не є правильно сформованим об'єктом.

Опис

Здебільшого метод String.raw() використовується з шаблонними літералами. Синтаксис, який наведено першим вище, використовується дуже рідко, оскільки JavaScript-рушій сам його викликає з правильними аргументами (так само як з іншими теговими функціями).

String.raw() — це єдина вбудована тегова функція шаблонних літералів. Вона працює просто як усталена шаблонна функція, і виконує конкатенацію. Її можна навіть реалізувати самостійно в коді JavaScript.

Приклади

Застосування методу String.raw()

String.raw`Привіт\n${2+3}!`;
// 'Привіт\\n5!', символ після 'Привіт' насправді
//  не є символом початку рядка,
// '\' та 'n' — це два окремі символи.

String.raw`Привіт\u000A!`;
// 'Привіт\\u000A!', так само тут, цього разу ми отримуємо символи
//  \, u, 0, 0, 0, A, 6.
// Будь-які екрановані послідовності не працюватимуть, а
// зворотні косі риски опинятимуться у виведеному рядку.
// Можна це додатково підтвердити, перевіривши властивість .length
// рядка.

let name = 'Вова';
String.raw`Привіт\n${name}!`;
// 'Привіт\\nВова!', вирази підставлення опрацьовано.

// В нормальній ситуації потреби викликати String.raw() як функцію
// не виникає, проте для відтворення `foo${2 + 3}bar${'Java' + 'Script'}baz`
// можна використати такий вираз:
String.raw({
  raw: ['foo', 'bar', 'baz']
}, 2 + 3, 'Java' + 'Script'); // 'foo5barJavaScriptbaz'
// Слід зауважити, що перший аргумент містить об'єкт з властивістю 'raw',
// значення якої — це ітерований об'єкт з розділеними рядками, взятими з
// шаблонного літералу.
// Решта аргументів — це значення для підставлення.

// Значенням властивості 'raw' першого аргументу може бути будь-яке ітероване
// значення, навіть рядок!
// Наприклад, 'test' буде вважатись послідовністю ['t', 'e', 's', 't'].
// Наступний виклик еквівалентний такому виразові
// `t${0}e${1}s${2}t`:
String.raw({ raw: 'test' }, 0, 1, 2); // 't0e1s2t'

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

Сумісність із браузерами

desktop mobile server
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Deno Node.js
raw
Chrome Full support 41
Edge Full support 12
Firefox Full support 34
Internet Explorer No support No
Opera No support No
Safari Full support 10
WebView Android No support No
Chrome Android Full support 41
Firefox for Android Full support 34
Opera Android No support No
Safari on iOS Full support 10
Samsung Internet Full support 4.0
Deno Full support 1.0
Node.js Full support 4.0.0

Дивіться також