有没有更简洁的方法来实现这个目标?
const message = `Error message: ${json.email ? json.email[0] : ''}`
答案 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)
答案 2 :(得分:0)
使用三元运算时,始终返回一个值。逻辑运算符应谨慎使用。
当逻辑表达式从左到右进行评估时,它们会被测试可能的短路"评估使用以下规则:
答案 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]', '')}`