ES6什么时候使用String.raw默认模板文字
我想连接一串字符串以在Javascript中构建查询字符串。以前我已经经历了丑陋的字符串连接来实现这一点:ES6什么时候使用String.raw默认模板文字
var queryString = "?action=" + actionValue + "&data=" + dataValue";
但随着ES6我看到有提供了新的方法,可以帮助我达到同样的效果有多大更好看的代码,就像在C#6 字符串插值:
string s = $"action={actionValue}&data={dataValue}"
我有两个默认模板文字和String.raw
,虽然每个命令的语法略有不同,他们都工作进行测试。我倾向于在我的最终副本中使用String.raw
,因为它不允许字符串被标记,因此将来像缺省模板文字一样被修饰。
虽然它说,在MDN docs是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*/);
不,使用String.raw
对您没有任何意义。
您应该编写自己的模板标签,以便以您喜欢的方式进行必要的URL编码和处理数组。
function myUrl(parts) {
var url = parts[0];
for (var i=1; i<arguments.length; i++) {
var val = arguments[i];
if (Array.isArray(val))
val = val.join(",");
url += encodeURIComponent(val);
url += parts[i];
}
return url;
}
然后你就可以
window.open(myUrl`@Url.Action("DownloadMultiple")?inIds=${inData}&outIds=${outData}&truckId=${truckId}`);
模板文字产生一个字符串。如果你使用String.raw
,你会得到该字符串的原始形式:
`a\tb`; // "a b"
String.raw`a\tb`; // "a\tb"
所以,你应该用String.raw
只有当你想要的原始形式。
Nit:“模板文字” –
啊我看到了,我应该使用模板文字方法,而不是String.raw来防止URL被正确编码。 –
到底是如何使用'String.raw'使用?你是否将它称为函数?这似乎很不方便。 –
我对你的问题有点困惑。你不能只是'var queryString = \'?action = $ {actionValue}&data = $ {dataValue} \';'? –
你为什么要原始字符串?你所要做的就是使用一个标签,它在每个插值上调用'encodeURIComponent'。 – Bergi