假设您正在从遗留系统接收JSON数据,遗留系统发送的对象可能有也可能没有某些属性,这些属性又可能嵌套在对象中,也可能不嵌套在对象中。我想每个人迟早都会面临这样的问题:
> jsonResponse = JSON.parse('{"a": 1}')
Object {a: 1}
> jsonResponse.a
1
> jsonResponse.a.b
undefined
> jsonResponse.a.b.c
Uncaught TypeError: Cannot read property 'c' of undefined
现在,你通常做的是以安全的方式访问属性,我经常以下列方式访问它们:
> jsonResponse.a && jsonResponse.a.b && jsonResponse.a.b.c
undefined
> ((jsonResponse.a||{}).b||{}).c
undefined
我要求的是一种紧凑,易读,快速编写,安全的方式来访问存在的深层属性,并在它们不存在时返回undefined
。
你会建议什么?是否有任何方法可以构建一个返回undefined
的对象,即使是(undefined).property
(我已经阅读了get
或defineGetter
,但它们看起来不够灵活 - 而且它们旧浏览器不支持?