在使用之前检查子对象是否存在

时间:2018-04-04 15:55:07

标签: javascript object javascript-objects

为了防止使用不存在的对象值(这会引发错误),我通常会这样做:

if(apple.details){
   // do something with apple.details
}

它通常正常。但是,如果它是关于“对象的对象的价值”,如apple.details.price,则不起作用,因为如果不存在.details,则if()会抛出错误。

我能做什么或通常有更好的方法来做到这一点?

3 个答案:

答案 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的简化版。