diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/zh-cn/web/javascript/reference/global_objects/string/raw/index.html | |
parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip |
initial commit
Diffstat (limited to 'files/zh-cn/web/javascript/reference/global_objects/string/raw/index.html')
-rw-r--r-- | files/zh-cn/web/javascript/reference/global_objects/string/raw/index.html | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/files/zh-cn/web/javascript/reference/global_objects/string/raw/index.html b/files/zh-cn/web/javascript/reference/global_objects/string/raw/index.html new file mode 100644 index 0000000000..89c4d568d5 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/string/raw/index.html @@ -0,0 +1,113 @@ +--- +title: String.raw() +slug: Web/JavaScript/Reference/Global_Objects/String/raw +tags: + - JavaScript + - Method + - Reference + - String + - 参考 + - 字符串 + - 方法 +translation_of: Web/JavaScript/Reference/Global_Objects/String/raw +--- +<div>{{JSRef()}}</div> + +<p><strong>String.raw()</strong> 是一个<a href="/zh-CN/docs/Web/JavaScript/Reference/template_strings">模板字符串</a>的标签函数,它的作用类似于 Python 中的字符串前缀 <code>r</code> 和 C# 中的字符串前缀 <code>@</code>(还是有点区别的,详见隔壁 Chromium 那边的<a href="https://bugs.chromium.org/p/v8/issues/detail?id=5016">这个 issue</a>),是用来获取一个模板字符串的原始字符串的,比如说,占位符(例如 <code>${foo}</code>)会被处理为它所代表的其他字符串,而转义字符(例如 <code>\n</code>)不会。</p> + +<h2 id="语法">语法</h2> + +<pre class="syntaxbox"><code>String.raw(<var>callSite</var>, <var>...substitutions</var>) + +String.raw`templateString` +</code></pre> + +<h3 id="参数">参数</h3> + +<dl> + <dt><code>callSite</code></dt> + <dd>一个模板字符串的“调用点对象”。类似<code>{ raw: ['foo', 'bar', 'baz'] }</code>。</dd> + <dt><code>...substitutions</code></dt> + <dd>任意个可选的参数,表示任意个内插表达式对应的值。</dd> + <dt><code>templateString</code></dt> + <dd>模板字符串,可包含占位符(<code>${...}</code>)。</dd> +</dl> + +<h3 id="返回值">返回值</h3> + +<p>给定模板字符串的原始字符串。</p> + +<h3 id="异常">异常</h3> + +<dl> + <dt><code>{{jsxref("TypeError")}}</code></dt> + <dd>如果第一个参数没有传入一个格式正确的对象,则会抛出 <code>TypeError</code> 异常。</dd> +</dl> + +<h2 id="描述">描述</h2> + +<p>在大多数情况下, <code>String.raw()</code>是用来处理模版字符串的. 不要被上面复杂的参数要求吓到,因为像所有的 <a href="/en-US/docs/Web/JavaScript/Reference/template_strings#Tagged_template_literals">tag functions</a>一样,你通常不需要把它看成一个普通函数,你只需要把它放在模板字符串前面就可以了,而不是在它后面加个括号和一堆参数来调用它,引擎会替你去调用它。</p> + +<p><code>String.raw()</code> 是唯一一个内置的模板字符串标签函数,因为它太常用了。不过它并没有什么特殊能力,你自己也可以实现一个和它功能一模一样的标签函数。</p> + +<h2 id="示例">示例</h2> + +<h3 id="使用_String.raw">使用 <code>String.raw()</code></h3> + +<pre class="brush: js">String.raw`Hi\n${2+3}!`; +// 'Hi\n5!',Hi 后面的字符不是换行符,\ 和 n 是两个不同的字符 + +String.raw `Hi\u000A!`; +// "Hi\u000A!",同上,这里得到的会是 \、u、0、0、0、A 6个字符, +// 任何类型的转义形式都会失效,保留原样输出,不信你试试.length + +let name = "Bob"; +String.raw `Hi\n${name}!`; +// "Hi\nBob!",内插表达式还可以正常运行 + + +// 正常情况下,你也许不需要将 String.raw() 当作函数调用。 +// 但是为了模拟 `t${0}e${1}s${2}t` 你可以这样做: +String.raw({ raw: 'test' }, 0, 1, 2); // 't0e1s2t' +// 注意这个测试, 传入一个 string, 和一个类似数组的对象 +// 下面这个函数和 `foo${2 + 3}bar${'Java' + 'Script'}baz` 是相等的. +String.raw({ + raw: ['foo', 'bar', 'baz'] +}, 2 + 3, 'Java' + 'Script'); // 'foo5barJavaScriptbaz' +</pre> + +<h2 id="规范">规范</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">规范</th> + <th scope="col">状态</th> + <th scope="col">备注</th> + </tr> + <tr> + <td>{{SpecName('ES2015', '#sec-string.raw', 'String.raw')}}</td> + <td>{{Spec2('ES2015')}}</td> + <td>Initial definition.</td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-string.raw', 'String.raw')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td></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="/zh-CN/docs/Web/JavaScript/Reference/template_strings">模板字符串</a></li> + <li>{{jsxref("String")}}</li> + <li><a href="/zh-CN/docs/Web/JavaScript/Reference/Lexical_grammar">JavaScript 词法</a></li> +</ul> |