ES6何时使用String.raw而不是默认的模板文字
ES6 when to use String.raw over default template literal
我正在尝试连接一组字符串,以在Javascript中构建查询字符串。以前我已经通过丑陋的字符串连接实现了这一点:
var queryString = "?action=" + actionValue + "&data=" + dataValue";
但在ES6中,我发现有一些新方法可以帮助我用外观更好的代码实现同样的结果,比如C#中的字符串插值:
string s = $"action={actionValue}&data={dataValue}"
我已经用默认模板literal和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*/);
模板文本生成一个字符串。如果您使用String.raw
,您将获得该字符串的原始形式:
`a'tb`; // "a b"
String.raw`a'tb`; // "a'tb"
因此,只有当您想要原始表单时,才应该使用String.raw
。
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}`);
相关文章:
- 用嵌套函数和默认函数定义函数
- 添加文字和评论功能更新Div
- 如何使用铁流星与流星的默认路线
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- CKeditor:更改对话框中的默认选择选项
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何从外部页面激活非默认引导选项卡
- 防止默认锚点行为AngularJS
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- jpm的默认Firefox路径没有'不起作用
- jquerydatetimepicker日期和时间应在框默认值中,而无需单击框
- 如果值为空,如何设置输入的默认值?jQuery
- 骨干模型默认值-todos.js示例中不必要的代码
- jquery日期选择器年份范围默认值
- jQuery:当屏幕大小改变时,如何更改默认图像和悬停图像
- 如何计算对象文字中的键
- Highcharts-如何在自定义格式化程序中获得默认的y轴标签格式化程序
- 默认情况下折叠和展开嵌套列表
- 对象文字调用默认属性
- ES6何时使用String.raw而不是默认的模板文字