在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
!
是的,它们不是递归的。
如果你的出发点是包含这些占位符串,据我所知是没有模板的编译器功能。当然有eval
; [插入所有关于使用eval
—仅限于您信任的内容的所有常见警告,而不是如果您可以避免它等等,请使用 —这里]。
因此,例如:
"use strict";
var x = {"add": "${a + b}"};
var a = 10, b = 20;
console.log(eval("`" + x.add + "`"));
虽然我从字符串中得到它,例如,''$ {a + b}“',从JSON源读取,所以没有解决方案? –
@YiminRong:如果你收到模板*作为字符串*,我不知道任何模板编译器的功能,没有。当然,你可以使用'eval'(有关使用'eval'的所有常见注意事项)。 –
他们的模板*文字*,不是模板字符串。确实,如果你不使用标签功能,他们最终会创建字符串(但如果你使用标签功能,他们可能不会)。 –
@ T.J.Crowder - 清理了一下。希望现在的措辞更好。 –