考虑以下因素:
String.raw`Test ${123}${'abc'}`;
String.raw`Test ${123 + 'abc'}`;
${123}${'abc'}
是否等同于${123 + 'abc'}
?换句话说,兄弟姐妹是否在幕后转换为${123 + 'abc'}
格式?
此外,如何在自己的标记模板函数中处理此特定情况?
答案 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' ]