在 ES6 中将字符串转换为模板文本

Yim*_*ong 5 javascript templates ecmascript-6

假设我有一个字符串"${a + b}",比如从 JSON 读取,我想将其解释为 ES6 模板文字。我认为这样的事情可能会奏效:

var x = {"add": "${a + b}"};
var a = 10, b = 20;
alert(`${x.add}`);
Run Code Online (Sandbox Code Playgroud)

但这会警告为${a + b},因此它只执行一级替换。

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

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

这仍然警告为${a + b}

尝试变得更聪明:

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

这警告为${a} + ${b}

以字符串开头,例如"${a + b}",有没有办法将其评估为完成,就好像它是模板文字一样?理想情况下没有eval

T.J*_*der 6

是的,它们不是递归的。

如果您的起点是包含这些占位符的字符串,据我所知,没有模板编译器功能。eval当然有;[在此处插入有关使用的所有常见警告eval - 仅适用于您信任的内容,而不是您可以避免使用的内容,等等]。

例如:

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