【问题标题】:How can I construct a Template String from a regular string? [duplicate]如何从常规字符串构造模板字符串? [复制]
【发布时间】:2015-06-28 13:52:33
【问题描述】:

所以我有这个string

var name = "Chaim";
var templateStr = "Hello, my name is ${name}";

如何将其转换为模板字符串,以便结果等于:

var template = `Hello, my name is ${name}`;

有没有办法以编程方式构造模板文字?

【问题讨论】:

  • 你不能没有eval,我不认为你想要那样。为什么不首先使用模板字符串?
  • 因为我想传递一个动态字符串用作模板。
  • @haim770 为什么动态字符串不能是模板文字?
  • 因为它是作为 Http 响应的一部分从服务器返回的。
  • 这是stackoverflow.com/q/29182244/218196 的副本,但@Bergi 的答案更好;)

标签: javascript ecmascript-6 template-strings


【解决方案1】:

有没有办法以编程方式构造模板文字?

没有。 “以编程方式”和“文字”是对立的(除非您处于编译器领域)。

模板字符串最好命名为内插字符串字面量左右。请do not confuse them with templates。如果您想为模板使用动态创建的字符串,请使用您选择的模板引擎。

当然,模板文字可能有助于实现这样的,你可能会得到一些简单的事情

function assemble(literal, params) {
    return new Function(params, "return `"+literal+"`;"); // TODO: Proper escaping
//             ^^^^^^^^ working in real ES6 environments only, of course
}
var template = assemble("Hello, my name is ${name}", "name");
template("Chaim"); // Hello, my name is Chaim

【讨论】:

  • Template strings should better have been named interpolated string literals - 它们不是被称为准字面量吗?
  • 以编程方式 ≠ litteral 是这里的关键。
  • 这很危险,因为它基本上是eval()s 字符串。
  • @adjenks 是的,您需要确保 literal 是一个有效且安全的值。只有当你不控制值时,它才是危险的。
猜你喜欢
  • 1970-01-01
  • 2015-11-22
  • 2011-08-18
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
相关资源
最近更新 更多