【发布时间】:2016-03-02 01:05:16
【问题描述】:
在访问嵌套的 JSON 对象键的值时,我们需要检查是否存在父键,以防止未定义的键错误。
鉴于此:
var obj = {
aaa: {
bbb: {
ccc: {
ddd: 'ok'
}
}
}
};
// #1 cause error if any of the parent key is not defined (e.g. aaa, bbb, ccc)
const ddd = obj.aaa.bbb.ccc.ddd || 'none';
// #2 this works but lots of repetition
const ddd = obj.aaa && obj.aaa.bbb && obj.aaa.bbb.ccc && obj.aaa.bbb.ccc.ddd || 'none';
在上面的示例中,如果未定义 aaa、bbb 或 ccc,#1 将不起作用。
#2 有效,但您会看到祖先键的重复。
问:是否有 JavaScript/ES6 语法来简化这一点,或者我们需要编写/使用自定义函数?
【问题讨论】:
-
你可以用 ES6 代理实现一些聪明的东西,但是 ES6 没有什么新东西,你应该使用现有的解决方案
-
我不认为这是真正的重复。太糟糕了,我无法发布答案。使用默认解构会有所帮助,尽管语法需要一些时间来适应:
const { aaa: { bbb: { ccc: { ddd = 'none' } = {} } = {} } = {} }; -
@Jacob:请将其发布为规范重复问题的答案。
标签: javascript json ecmascript-6