javascript中通用模板文本函数的标记
我的目标是编写一个带标记的模板函数,如javascript中通用模板文本函数的标记,javascript,template-literals,tagged-templates,Javascript,Template Literals,Tagged Templates,我的目标是编写一个带标记的模板函数,如 myTemplateTagFunction`some text ${variable} etc. etc.` …其行为类似于javascript中的默认模板文本函数 我的第一次尝试是 let myTaggedTemplate = args => `${args}` 但这很快就打破了 > myTaggedTemplate`hello world ${2 + 5}` // "hello world ," > `hel
myTemplateTagFunction`some text ${variable} etc. etc.`
…其行为类似于javascript中的默认模板文本函数
我的第一次尝试是
let myTaggedTemplate = args => `${args}`
但这很快就打破了
> myTaggedTemplate`hello world ${2 + 5}`
// "hello world ,"
> `hello world ${2 + 5}`
// "hello world 7"
必须有一种更简单的方法来实现这一点,但我没有找到?您需要更改您的功能:
let myTaggedTemplate = (strings,...values) => ...;
试着按照中的例子来做,也许有一个较短的方法,但这是我的方法:
const myTaggedTemplate = (strings, ...vars) => {
let result = '';
strings.forEach((str, i) => {
result += `${str}${i === strings.length - 1 ? '' : vars[i]}`;
});
return result;
};
如何定义带标记的模板函数
如果定义带标记的模板函数,它必须接收字符串数组作为第一个参数,并接收任意数量的表达式作为后续参数。字符串都是插入表达式之间的字符串(在所有${…}
之间),所有表达式都是您输入到${…}
中的值
示例代码
让numExp=2;
函数标记函数(字符串,…表达式){
让returnString=“”;
for(设i=0;i );代码>使用默认的模板文本函数,您是指模板文本在没有标记的情况下的行为方式吗?标记的模板不能这样工作。您是否看过(例如)MDN上的文档,以查看参数是否实际传递给标记的模板函数?@Quentin我看过文档,这就是为什么我第一次尝试将传入参数传递回模板文本函数的原因。如果你真的很了解他们,请把你的理解用于回答这个问题question@rob-戈登-这个问题的前提没有真正意义。我可以想出一个解决办法(和彼得一样),但坦率地说,这是愚蠢的。如果你想得到这种效果,只需使用模板文字。@Quentin如果你想知道我为什么要问,那就问问我为什么要问。如果你想嘲笑这个问题,而不是质问,那就由你来决定,那===undefined
检查有什么用?这不是普通模板字符串的工作方式。字符串数组可能比vars数组长,因此对于最后一个索引,vars[i]将是未定义的。对于编辑,这更好。