Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确定引用中的对象是否为null的最佳方法_Javascript_Typescript - Fatal编程技术网

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

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

在JavaScript(或TypeScript)中,如果我要引用以下内容:

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(或{})上不存在。