1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
---
title: String.raw()
slug: Web/JavaScript/Reference/Global_Objects/String/raw
tags:
- ECMAScript 2015
- JavaScript
- String
- метод
- рядок
translation_of: Web/JavaScript/Reference/Global_Objects/String/raw
---
<div>{{JSRef}}</div>
<p><span class="seoSummary">Статичний метод <strong><code>String.raw()</code></strong> є функцією-тегом <a href="/uk/docs/Web/JavaScript/Reference/template_strings">шаблонних літералів</a>. Він <em>схожий</em> на префікс <code>r</code> у мові Python, або на префікс <code>@</code> у мові C# для рядкових літералів. (Але вони не <em>ідентичні</em>; дивіться пояснення у <a href="https://bugs.chromium.org/p/v8/issues/detail?id=5016">цій проблемі</a>.) Він використовується для отримання сирої рядкової форми шаблонних рядків, тобто, підстановки (наприклад, <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">${foo}</span></font>) обробляються, а екранування (наприклад, <code>\n</code>) ні.</span></p>
<div>{{EmbedInteractiveExample("pages/js/string-raw.html")}}</div>
<h2 id="Синтаксис">Синтаксис</h2>
<pre class="syntaxbox"><code>String.raw(<var>callSite</var>, <var>...substitutions</var>)
String.raw`<var>templateString</var>`
</code></pre>
<h3 id="Параметри">Параметри</h3>
<dl>
<dt><code><var>callSite</var></code></dt>
<dd>Добре сформований об'єкт-шаблон точки виклику, наприклад <code>{ raw: ['раз', 'два', 'три'] }</code>.</dd>
<dt><code><var>...substitutions</var></code></dt>
<dd>Містить значення підстановок.</dd>
<dt><code><var>templateString</var></code></dt>
<dd>{{jsxref("template_strings", "Шаблонний рядок")}}, може містити підстановки (<code>${...}</code>).</dd>
</dl>
<h3 id="Значення_що_вертається">Значення, що вертається</h3>
<p>Сира рядкова форма наданого шаблонного рядка.</p>
<h3 id="Винятки">Винятки</h3>
<dl>
<dt>{{jsxref("TypeError")}}</dt>
<dd>Помилка {{jsxref("TypeError")}} викидається, якщо перший аргумент не є добре сформованим об'єктом.</dd>
</dl>
<h2 id="Опис">Опис</h2>
<p>У більшості випадків <code>String.raw()</code> використовується з шаблонними рядками. Перший синтаксис, наведений вище, використовується лише зрідка, тому що рушій JavaScript викличе його для вас з правильними аргументами (як і інші <a href="/uk/docs/Web/JavaScript/Reference/template_strings#Tagged_template_literals">функції-теги</a>).</p>
<p><code>String.raw()</code> - єдина вбудована функція-тег шаблонних рядків. Вона працює як звичайна шаблонна функція та виконує об'єднання. Ви навіть можете перевизначити її звичайним кодом JavaScript.</p>
<h2 id="Приклади">Приклади</h2>
<h3 id="Використання_String.raw">Використання <code>String.raw()</code></h3>
<pre class="brush: js">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т'
</pre>
<h2 id="Специфікації">Специфікації</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Специфікація</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('ESDraft', '#sec-string.raw', 'String.raw')}}</td>
</tr>
</tbody>
</table>
<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2>
<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
<p>{{Compat("javascript.builtins.String.raw")}}</p>
<h2 id="Див._також">Див. також</h2>
<ul>
<li><a href="/uk/docs/Web/JavaScript/Reference/template_strings">Шаблонні літерали</a></li>
<li>{{jsxref("String")}}</li>
<li><a href="/uk/docs/Web/JavaScript/Reference/Lexical_grammar">Лексична граматика</a></li>
</ul>
|