兄弟姐妹替换是否在标记模板中组合?

时间:2015-10-18 17:44:10

标签: javascript ecmascript-6 ecmascript-2015 template-literals tagged-templates

考虑以下因素:

String.raw`Test ${123}${'abc'}`;
String.raw`Test ${123 + 'abc'}`;

${123}${'abc'}是否等同于${123 + 'abc'}?换句话说,兄弟姐妹是否在幕后转换为${123 + 'abc'}格式?

此外,如何在自己的标记模板函数中处理此特定情况?

1 个答案:

答案 0 :(得分:1)

使用String.raw,行为基本相同。它和+(带字符串值)都执行连接,实现相同的结果。

它们之间的区别在于第1行是推迟String.raw执行的连接,${123}${'abc'}作为单独的参数提供给它。

在使用+时,连接始终是预先执行的,只为String.raw的{​​{1}}传递一个值。

${123 + 'abc'}

对于其他标记函数,差异可能更明显,因为函数可能在连接之前(或之外)执行其他操作。

一个人为的例子:

function foo(template, ...values) {
  console.log(template, values);
}

foo`Test ${123}${'abc'}`; // [ 'Test ', '', '' ] [ 123, 'abc' ]
foo`Test ${123 + 'abc'}`; // [ 'Test ', '' ]     [ '123abc' ]