在标记功能中加入字符串

时间:2016-09-19 23:43:32

标签: javascript ecmascript-6 string-interpolation

ES6引入了字符串插值。但是这个字符串不仅仅是插值 - 它们也是can be used with tag function to process values

我不知道这种功能的目的是什么,但我认为以某种方式处理所有内联值非常有用。例如,用于转义或编码。当然,我可以编写这样的代码:



function toUrl(s, ...vals) {
  vals = vals.map(encodeURIComponent);

  /// ???
  var res = '';

  for (var q=0; q<vals.length; ++q) {
    res += s[q] + vals[q];
  }

  return res + s[s.length-1];
}

var data='a+b', args='%'
console.log(toUrl `data=${data}&args=${args}`)
console.log(toUrl `data=${data}&args=${args}&t=1`)
&#13;
&#13;
&#13;

但我很惊讶我必须在???之后编写这段代码。对我来说,使用此功能都需要类似的代码 - 使用字符串合并处理过的参数。但我找不到相应的标准方法。它存在吗?如果没有,标记蜇伤的最初目的是什么?它的典型用法是什么?

PS:Same question in Russian.

1 个答案:

答案 0 :(得分:3)

您可以使用String.raw功能:

function toUrl(s, ...vals) {
  vals = vals.map(encodeURIComponent);
  return String.raw({ raw: s }, ...vals);
}