Javascript 无法读取正在进行破坏的null属性

Javascript 无法读取正在进行破坏的null属性,javascript,reactjs,ecmascript-6,destructuring,Javascript,Reactjs,Ecmascript 6,Destructuring,销毁很酷,但在销毁嵌套对象时,我开始遇到严重问题。我有以下代码: const { credit: { amont }, } = userProfile 这是危险的,因为如果信用证为空怎么办?整个应用程序都崩溃了。我如何防止这种情况?我知道一种方法是使用打字脚本,但我不想这样。我开始怀疑对nested进行销毁与使用dot没有区别。在销毁时,您可以通过提供默认值来避免应用程序崩溃: const { credit: { amont } = {}, } = userProfil

销毁很酷,但在销毁嵌套对象时,我开始遇到严重问题。我有以下代码:

const {
      credit: { amont },
    } = userProfile

这是危险的,因为如果信用证为空怎么办?整个应用程序都崩溃了。我如何防止这种情况?我知道一种方法是使用打字脚本,但我不想这样。我开始怀疑对nested进行销毁与使用dot没有区别。

在销毁时,您可以通过提供默认值来避免应用程序崩溃:

const {
  credit: { amont } = {},
} = userProfile
console.log(amont); //amont will be undefined

您可以稍后通过
检查amont!!amont
无论您在何处使用它。

用深度分解来解决这个问题是不可能的。另一个答案表明,可以使用,但它们仅适用于
未定义的值:

const { credit: { amont } = {} } = userProfile || {};
虽然
null
值仍会导致错误,但有必要对可能为null的所有对象进行短路评估:

const { credit } = userProfile || {};
const { amont } = credit || {};
这可以通过读取路径并检查空值的安全导航实用程序函数来解决

一个著名的例子是:

我知道一种方法是使用打字脚本,但在这里我不知道


只有在保证了类型安全的情况下,才有可能用TypeScript解决这个问题。如果
userProfile
来自JSON响应,则必须应用运行时类型检查来断言对象不是
null

如果您不确定您的数据结构,那么是的,不要这样做。如果
credit
如问题所示为null,这将不起作用。它有效,您也可以尝试一下。甚至我们在销毁时也会为嵌套对象保存应用程序崩溃。不需要尝试它就知道它不会,
const{credit:{amont}={},}={credit:null}
。默认值仅应用于
未定义的
。不是
null
。你的意思是应用程序仍然会崩溃?很遗憾,是的,这不能单靠解构来实现。@SakhiMansoor谢谢,如果这对你也有帮助的话,我很高兴。所以要不惜一切代价避免
null
。@Hoknimo是的,解构比未定义的更不实用。但是,由于您可能从某些来源获得它(例如,JSON中没有未定义的),因此您必须以任何方式处理null。然后避免嵌套的解构?因为查看api响应,我无法判断是否会有未定义的对象属性。是的,这里的解构没有用。您需要首先处理响应,例如,如果您的数据结构与API响应不同,则用未定义的和可能的其他更改替换null。
const amont = _.get(userProfile, 'credit.amont');