【问题标题】:Converting Strings to Template Literals in ES6在 ES6 中将字符串转换为模板文字
【发布时间】:2018-01-23 15:54:06
【问题描述】:

假设我有一个类似"${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}

以字符串开头,例如@ 987654328@,有没有办法让这个评估完成,就好像它是一个模板文字?理想情况下没有eval

【问题讨论】:

  • 它们是模板文字,而不是模板字符串。确实,如果你不对它们使用标签函数,它们最终会创建字符串(但如果你对它们使用标签函数,它们可能不会)。
  • @T.J.Crowder - 稍微清理了一下。希望现在措辞更好。

标签: javascript templates ecmascript-6


【解决方案1】:

是的,它们不是递归的。

如果您的起点是一个包含这些占位符的 string,据我所知,没有模板编译器功能。当然有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 的所有常见警告)。
猜你喜欢
  • 2015-05-24
  • 1970-01-01
  • 2017-07-11
相关资源
最近更新 更多