将字符串转换为 ES6 中的模板字面量

6
假设我有一个字符串,例如"${a + b}",它是从JSON中读取出来的,我想将其解释为ES6模板文字。我认为下面这个方法可能有效:
var x = {"add": "${a + b}"};
var a = 10, b = 20;
alert(`${x.add}`);

但是这样的警告看起来像是${a + b},所以它只进行了一层替换。

尝试通过再次解释变量来变得聪明起来:

var a = 10, b = 20;
var x = {"add": "${a + b}"};
var i = `${x.add}`;
alert(`${i}`);

这仍然会警报为${a + b}

尝试更聪明一些:

var a = 10, b = 20;
var x = {"add": "${a} + ${b}"};
var i = `${x.add}`;
alert(`${i}`);

这会警报为 ${a} + ${b}

从一个字符串开始,比如"${a + b}",有没有办法将其评估完成,就像它是一个模板文字一样?最好不要使用 eval


它们是模板“字面量”,而不是模板字符串。如果您不在它们上使用标签函数,它们最终会创建字符串(但如果您在它们上使用标签函数,则可能不会)。 - T.J. Crowder
@T.J.Crowder - 我稍微整理了一下,希望措辞现在更好了。 - Yimin Rong
1个回答

6

是的,它们不是递归的。

如果你的出发点是一个包含这些占位符的字符串,据我所知,没有模板编译器函数。当然有eval;[在使用eval时插入所有常见的警告 - 只有在信任内容时使用,尽可能避免使用等等].

例如:

"use strict";
var x = {"add": "${a + b}"};
var a = 10, b = 20;
console.log(eval("`" + x.add + "`"));


我将其作为字符串文字获取,例如从JSON源中读取的"${a + b}",所以没有解决方案? - Yimin Rong
1
如果您将模板作为字符串接收,我不知道是否有任何模板编译器函数。当然,您可以使用eval(关于使用eval的所有常规警告都适用)。 - @ YiminRong - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接