ES6何时使用String.raw而不是默认模板文字

Mat*_*ett 4 javascript string ecmascript-6

我正在尝试连接一堆字符串以在Javascript中构建查询字符串.以前我通过丑陋的字符串连接实现了这个目的:

var queryString = "?action=" + actionValue + "&data=" + dataValue";
Run Code Online (Sandbox Code Playgroud)

但是使用ES6,我发现有一些新方法可以帮助我用更好看的代码实现相同的结果,比如C#6中的字符串插值:

string s = $"action={actionValue}&data={dataValue}"
Run Code Online (Sandbox Code Playgroud)

我已经使用默认模板文字进行了测试,String.raw虽然每个模板的语法略有不同,但它们都有效.我倾向于String.raw在我的最终副本中使用,因为它不允许对字符串进行标记,因此将来会像默认模板文字一样进行修改.

虽然它确实在MDN文档中String.raw基本上调用默认模板文字方法,但我喜欢String.raw更好的语法...我在String.join我的字符串的花括号内调用我正在格式化的方法,所以也许这是一个误用String.raw.

是否有任何ES6向导可以启发我并提供一个优于另一个的理由?

我的代码:

var defaultTemplateStringUrl = `@Url.Action("DownloadMultiple")?inIds=${inData.join(',')}&outIds=${outData.join(',')}&truckId=${truckId}`;
var rawStringUrl = String.raw `@Url.Action("DownloadMultiple")?inIds=${inData.join(',')}&outIds=${outData.join(',')}&truckId=${truckId}`;

window.open( /*url goes here*/);
Run Code Online (Sandbox Code Playgroud)

Ori*_*iol 5

模板文字生成一个字符串.如果您使用String.raw,您将获得该字符串的原始形式:

`a\tb`;           // "a b"
String.raw`a\tb`; // "a\tb"
Run Code Online (Sandbox Code Playgroud)

所以你应该String.raw只在你想要原始形式时使用.