ES6模板字符串作为变量?

时间:2016-11-11 02:03:16

标签: ecmascript-6

似乎模板字符串传递给模块是一件非常有用的事情,让我们假设你想让调用代码提供他们想要格式化某些输出的方式。

事情是,至少在节点REPL中,似乎是立即评估模板字符串,所以你不能。例如:

var template = `Time: ${now} | Message: ${thing.msg}`;
var thing = {msg : 'Something wicked this way comes'};
var now = new Date();

尝试将这三行输入REPL将导致错误,因为thing的行尚未定义template

有解决方法吗?我真的很想将模板字符串本身作为变量传递。

请注意,我看到了关于" dumbing down"问这个之前的模板字符串。这根本不是同一个问题,因为我所要求的是推迟执行,而不是转换为普通字符串。

1 个答案:

答案 0 :(得分:4)

我唯一能想到的是将模板包装在lambda中以推迟执行。不确定这对您的用例是否有用?我想的是:



var template = (now, thing) => `Time: ${now} | Message: ${thing && thing.msg}`;
var thing = {msg : 'Something wicked this way comes'};
var now = new Date();

console.log(template(now, thing));




使用${thing && thing.msg}代替${thing.msg}可以防止出现控制台错误,但如果对象不存在则会返回'Message: undefined'