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

问题描述:

假设我有一个像"${a + b}"这样的字符串,比如说从JSON读取,我想将其解释为ES6模板文本。我觉得这样的事情可能工作:在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

+0

他们的模板*文字*,不是模板字符串。确实,如果你不使用标签功能,他们最终会创建字符串(但如果你使用标签功能,他们可能不会)。 –

+0

@ T.J.Crowder - 清理了一下。希望现在的措辞更好。 –

是的,它们不是递归的。

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

因此,例如:

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

+0

虽然我从字符串中得到它,例如,''$ {a + b}“',从JSON源读取,所以没有解决方案? –

+0

@YiminRong:如果你收到模板*作为字符串*,我不知道任何模板编译器的功能,没有。当然,你可以使用'eval'(有关使用'eval'的所有常见注意事项)。 –