js 对象取值遇到undefinded时,如何停止继续取值?

问题如下:
对方 正常情况下 给我传递了一个对象,接收后如下

var val={
    o1:{
        key:1
    },
    o2:{
        key:2
    }
}

但出现错误时,传回默认值,我接收后如下

var val={
    o2:{
        key:2
    }
}

我想要的效果就是,如果出现错误时取传给我的默认值,,这么写觉得比较优雅[但报错]

var key=val.o1.key || val.o2.key;//undefined

但我需要判定o1是否undefined,如下

if(typeof val.o1 === 'undefined'){
    key=val.o2.key;
}else{
    key=val.o1.key;
}

有没有什么有效但优雅的方法可以在 var key=val.o1.key || val.o2.key;时,o1未定义则直接去后面的值,而不报错?

阅读 3.8k
5 个回答

var key = (val.o1 || val.o2 || {}).key || null;

在可以无视 es6 兼容性的情况下可以考虑下面的代码:

const {o1:{key:key1}={},o2:{key:key2}={}} = val
const key = key1 || key2

兄弟你哪个if语句压根不会走,typeof一个对象 返回值应该为object吧 。你可以用instanceof

Object.values(val)[0]['key']
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题