我正在尝试连接一堆字符串以在Javascript中构建查询字符串。以前我通过丑陋的字符串连接实现了这一点:
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
的语法...我正在调用{{1}我正在格式化我的字符串的花括号内的方法,所以也许这是对String.join
的误用。
是否有任何ES6向导能够启发并提供一个优于另一个的理由?
我的代码:
String.raw
答案 0 :(得分:5)
模板文字生成一个字符串。如果您使用String.raw
,您将获得该字符串的原始形式:
`a\tb`; // "a b"
String.raw`a\tb`; // "a\tb"
因此,只有在需要原始表单时才应使用String.raw
。
答案 1 :(得分:3)
不,使用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}`);