为了防止使用不存在的对象值(这会引发错误),我通常会这样做:
if(apple.details){
// do something with apple.details
}
它通常正常。但是,如果它是关于“对象的对象的价值”,如apple.details.price
,则不起作用,因为如果不存在.details
,则if()
会抛出错误。
我能做什么或通常有更好的方法来做到这一点?
答案 0 :(得分:2)
你可以做链:
if (apple && apple.details && apple.details.price) { ... }
但如果链条很长,那就不方便了。相反,您可以使用lodash.get method 用lodash:
if (get(apple, 'details.price')) { ... }
答案 1 :(得分:1)
您可以尝试@Sphinx的解决方案
我还建议lodash的_.get(apple,' details.price'),但肯定不值得将整个库包含在简单项目或少量任务中。
_。get()函数也可以防止抛出错误,甚至未定义apple变量(未定义)
答案 2 :(得分:1)
在检查嵌套子对象之前,您必须检查每个父对象,即if (a && a.b && a.b.c) {}
如果您正在使用LoDash,则可以使用带有可选默认值的_.get
function:
let obj = {'a': {'b': {'c': 42} } };
let result = _.get(obj, 'a.b.c'); // 42
let result2 = _.get(obj, 'a.b.d'); // undefined
let result3 = _.get(obj, 'a.c.d', null); // null
如果您未使用LoDash,则可以实施_.get
as shown in this answer的简化版。