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

时间:2017-08-15 16:58:55

标签: javascript templates ecmascript-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

1 个答案:

答案 0 :(得分:3)

是的,它们不是递归的。

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

例如:

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