Javascript 确定引用中的对象是否为null的最佳方法
在JavaScript(或TypeScript)中,如果我要引用以下内容:Javascript 确定引用中的对象是否为null的最佳方法,javascript,typescript,Javascript,Typescript,在JavaScript(或TypeScript)中,如果我要引用以下内容: return myObj1.myObj2.myObj3.myProperty; if (myObj1 && myObj2 && myObj3) return myObj1.myObj2.myObj3.myProperty; else return null; 为了安全起见,我用类似以下的东西来保护它: return myObj1.myObj2.myObj3.myPro
return myObj1.myObj2.myObj3.myProperty;
if (myObj1 && myObj2 && myObj3)
return myObj1.myObj2.myObj3.myProperty;
else
return null;
为了安全起见,我用类似以下的东西来保护它:
return myObj1.myObj2.myObj3.myProperty;
if (myObj1 && myObj2 && myObj3)
return myObj1.myObj2.myObj3.myProperty;
else
return null;
有没有一种更简洁的方法可以从上面的引用中获取null,而不用if来包围它
请注意,由于我将在TypeScript应用程序中使用此选项,某些解决方案可能无法与动态对象定义一起使用
谢谢。您可以定义一些临时对象,以便在查找失败时进行替换
return (((myObj1||{}).myObj2||{}).myObj3||{}).myProperty || null;
如果需要,可以创建可重用对象
const o = Object.create(null);
然后根据需要使用它
return (((myObj1||o).myObj2||o).myObj3||o).myProperty || null;
您可以定义一些临时对象,以便在查找失败时进行替换
return (((myObj1||{}).myObj2||{}).myObj3||{}).myProperty || null;
如果需要,可以创建可重用对象
const o = Object.create(null);
然后根据需要使用它
return (((myObj1||o).myObj2||o).myObj3||o).myProperty || null;
我会使用像
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);
有关详细信息,请参见。我将使用类似于
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);
有关详细信息,请参见。我想您的意思是if(myObj1&&myObj1.myObj2&&myObj1.myObj2.myObj3)
?如果您递归打印对象,这就是您需要的吗?@Andreas,您的链接提供了一个很好的答案。添加为答案,我将按此标记。顺便说一句,你知道访问这样的属性是否会导致性能下降吗?我想你的意思是if(myObj1&&myObj1.myObj2&&myObj1.myObj2.myObj3)
?如果你递归打印对象,这就是你需要的吗?@Andreas,你的链接提供了一个很好的答案。添加为答案,我将按此标记。顺便说一句,你知道访问这样的属性是否会导致性能下降吗?这看起来是一个很好的Javascript解决方案。我没有考虑到我可能需要一个只使用Typescript的解决方案,因为这会产生错误,因为myObj2在o(或{})上不存在。看起来是一个很好的Javascript解决方案。我没有考虑到我可能需要一个只使用Typescript的解决方案,因为这会产生错误,因为myObj2在o(或{})上不存在。