String.raw()

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

Синтаксис

String.raw(callSite, ...substitutions)

String.raw`templateString`

Параметри

callSite
Добре сформований об'єкт-шаблон точки виклику, наприклад { raw: ['раз', 'два', 'три'] }.
...substitutions
Містить значення підстановок.
templateString
Шаблонний рядок, може містити підстановки (${...}).

Значення, що вертається

Сира рядкова форма наданого шаблонного рядка.

Винятки

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

Опис

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

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

Приклади

Використання String.raw()

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

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

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

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

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

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

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

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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
rawChrome Full support 41Edge Full support 12Firefox Full support 34IE No support NoOpera No support NoSafari Full support 10WebView Android No support NoChrome Android Full support 41Firefox Android Full support 34Opera Android No support NoSafari iOS Full support 10Samsung Internet Android Full support 4.0nodejs Full support 4.0.0

Legend

Full support  
Full support
No support  
No support

Див. також