String.raw()
Статичний метод String.raw()
— це тегова функція шаблонних літералів. Вона подібна до префіксу r
в Python, або префіксу @
в C# для рядкових літералів. (Проте вони не ідентичні; пояснення в цьому обговоренні (англ.).) Вона використовується для отримання необроблених рядкових форм шаблонних літералів — тобто таких, в яких опрацьовані вирази підставлення (наприклад ${foo}
), а екрановані послідовності (зокрема \n
) — ні.
Спробуйте його в дії
Синтаксис
String.raw(callSite, ...substitutions)
String.raw`templateString`
Параметри
callSite
Сформований об'єкт виклику шаблонної функції, як от
{ raw: ['foo', 'bar', 'baz'] }
....substitutions
Містить значення для підставлення.
templateString
Шаблонний літерал; може містити (необов'язково) вирази підставлення (
${...}
).
Повернене значення
Необроблена рядкова форма переданого шаблонного літерала.
Винятки
Опис
Здебільшого метод 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 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |
Дивіться також
- Поліфіл методу
String.raw
наявний уcore-js
- Шаблонні літерали
String
- Лексична граматика