在标记函数中加入字符串

Join strings in tagging function

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`)

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

PS: Same question in Russian.

您可以使用 String.raw 函数:

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