确定引用中的对象是否为空的最佳方法

时间:2017-10-27 15:00:45

标签: javascript typescript

在JavaScript(或TypeScript)中,如果我要引用类似的东西:

return myObj1.myObj2.myObj3.myProperty;

为了安全起见,我用以下的方式保护它:

if (myObj1 && myObj2 && myObj3) 
    return myObj1.myObj2.myObj3.myProperty;
else
    return null;

是否有更简洁的方法从上面的引用中获取null而不用if?

包围它

请注意,由于我将在TypeScript应用程序中使用它,因此某些解决方案可能无法用于动态对象定义。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以定义一些临时对象,以便在查找失败时替换。

return (((myObj1||{}).myObj2||{}).myObj3||{}).myProperty || null;

如果需要,您可以制作可重复使用的对象。

const o = Object.create(null);

然后根据需要使用它。

return (((myObj1||o).myObj2||o).myObj3||o).myProperty || null;

答案 1 :(得分:1)

我使用像lodash这样的库:

 //gets undefined if any part of the path doesn't resolve.
 const answer = _.get(myObj1, "myObj2.myObj3.myProperty");

 //gets null if any part of the path doesn't resolve.
 const answer2 = _.get(myObj1, "myObj2.myObj3.myProperty", null);

有关详细信息,请参阅https://lodash.com/docs/4.17.4#get