概述

String.raw() 是一个模板字符串的标签函数,它的作用类似于 Python 中的字符串前缀 r 和 C# 中的字符串前缀 @,是用来获取一个模板字符串的原始字面量值的。

语法

String.raw(callSite, ...substitutions)
String.raw`templateString`

参数

callSite
一个模板字符串的“调用点对象”。类似{ raw: ['foo', 'bar', 'baz'] }
...substitutions
任意个可选的参数,表示任意个内插表达式对应的值。
templateString
模板字符串。

返回

给定模板字符串的原始字面量值。

异常

TypeError
如果第一个参数没有传入一个格式良好的调用点对象,则会抛出 TypeError 异常。

描述

不要被上面复杂的参数要求吓到,因为像所有的标签函数一样,你通常不需要把它看成一个普通函数,你只需要把它放在模板字符串前面就可以了,而不是在它后面加个括号和一堆参数来调用它,引擎会替你去调用它。

String.raw() 是唯一一个内置的模板字符串标签函数,因为它太常用了。不过它并没有什么特殊能力,你自己也可以实现一个和它功能一模一样的标签函数。

示例

String.raw `Hi\n!`;                 
// "Hi\\n!",这里得到的不是 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({raw: "test"}, 0, 1, 2); 
// "t0e1s2t",我认为你通常不需要把它当成普通函数来调用

规范

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
String.raw
Standard Initial definition.

浏览器兼容性

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox 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 41Edge Mobile Full support YesFirefox 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

 

相关链接