【问题标题】:default values in javascript template stringsjavascript 模板字符串中的默认值
【发布时间】:2018-06-07 19:17:36
【问题描述】:

有没有办法访问 javascript 模板字符串引擎来为未定义的变量提供默认值?

console.log(`this variable is undefined: ${x}`) 
// throws ReferenceError

// but i want to generate something like this:
"this variable is undefined: <warning! undefined variable>"

这样也行:

function tag(strings,...values){
   // values[i] should be "undefined" if this variable is undefined
}
tag`${x}`

如果那不可能,是否有一个模板字符串引擎可以完全实现 javascript 的功能并具有此功能?

【问题讨论】:

  • 它不叫“模板字符串引擎”,它只是一个模板引擎。去吧。
  • 字符串插值不能解决参考错误。为什么你的代码有时定义了x,有时没有?
  • @Bergi 因为我正在编写代码生成器
  • 但是x 不是模板字符串的一部分?是的,听起来您确实在寻找模板引擎而不是任意字符串插值(用户在其中编写 JS 代码)。
  • 是的,这正是模板文字所做的:字符串插值。 x 是一个任意的 JavaScript 表达式,而不是“名称”。

标签: javascript template-strings


【解决方案1】:

您可以使用|| 来合并值,例如:

console.log(`this variable is undefined: ${x || '<warning! undefined variable>'}`) 

【讨论】:

  • 问题中的代码抛出了ReferenceError,因为从未定义过x。你的代码也会做同样的事情。
  • 是的,这也会引发ReferenceError - 这也意味着我必须更改模板字符串,这不是最佳的
  • 如何修复这个 ReferenceError?即使我定义变量 x,它也会抛出相同的错误: (var x = "test;)
  • `${typeof greeting === 'undefined' ? 'Howdy' : greeting} there`
  • 有时候,简单的方法就在那里,在我们眼前,我们只是看不到它:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 2019-04-19
  • 2018-03-04
  • 2023-04-06
相关资源
最近更新 更多