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.

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

BCD tables only load in the browser

Див. також