我正在为模板文字编写一个 es6 标记函数,它首先检查字符串中的条件,如果未找到该条件,则仅将模板文字解释为未标记。我很好奇,从我的标记函数中,是否有一种方法可以调用浏览器的 native 模板文字函数(我认为这比我自己实现的函数更快)。 Bonue:有了这个,就没有机会进行标签组合,例如 htmlEscape(unindentfoobar
);
例如。
function dumbTag(strs, ...vals) {
vals = vals.map((val,i) =>
(i % 2 == 0 ? 'even:' : 'odd:')+val);
return String.template(strs, ...vals);
}
我自己实现的功能 - 有没有更快的方式/方法来调用浏览器的功能?
function template(strs, ...vals) {
let result = strs[0];
for (let [i,val] of vals.entries()) {
result += val;
result += strs[i+1];
}
return result;
}
最佳答案
您可以(滥用)使用 String.raw
(唯一的内置标签)用于此目的:
function doNothingTag() {
arguments[0] = { raw: arguments[0] };
return String.raw(...arguments);
}
// Or in a more modern style:
const doNothingTag = (strings, ...rest) => String.raw({ raw: strings }, ...rest);
doNothingTag`It ${true ? 'works!' : 'fails'}`
// "It works!"
doNothingTag`Even\nwith\nescape\nsequences!`
// "Even
// with
// escape
// sequences!"
这本质上只是在欺骗 String.raw
认为转义解释的字符串是原始版本。
关于javascript - 如何从标记函数中调用原生 es6 模板字符串替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38209627/