使用三元而不用其他的替代方法

时间:2018-05-04 11:32:15

标签: javascript

有没有更简洁的方法来实现这个目标?

const message = `Error message: ${json.email ? json.email[0] : ''}`

4 个答案:

答案 0 :(得分:3)

实际上有关于此的tc39提案:optional chaining。 它生效后就像

一样简单
const message = `Error message: ${json?.email?.[0] || ''} ${json?.password?.[0] || ''} ${json?.username?.[0] || ''}`

“第1阶段”意味着“它似乎正在讨论中”。 您可以在Babel的帮助下使用这样的语法。

否则(没有Babel)你最好使用lodash's _.get之类的帮助或编写你自己的版本。为什么不使用三元运算符?因为它的可读性差。

答案 1 :(得分:2)

您可以使用||,如下所示

(arr || [''])[0]

如果arrfalsy,则使用带有空字符串作为第一个元素的新数组。 [0]将返回数组的第一个元素。

答案 2 :(得分:0)

使用三元运算时,始终返回一个值。逻辑运算符应谨慎使用。

  

当逻辑表达式从左到右进行评估时,它们会被测试可能的短路"评估使用以下规则:

  • false&& (任何东西)通过短路评估为假。
  • true ||(any)通过短路评估为真。

答案 3 :(得分:0)

如果你使用lodash,你可以使用_.get method,它允许你指定嵌套属性访问器的整个路径,如果找不到路径上的任何属性,它可以选择返回默认值:

_.get(json, 'password[0]', '');

所以你的例子会翻译成这样的东西:

const message = `Error message: ${_.get(json, 'email[0]', '')} ${_.get(json, 'password[0]', '')} ${_.get(json, 'username[0]', '')}`