如何评估对象属性是否存在于其值为0?



我试图评估一个对象是否具有以下特定属性,就像我直接到最后一个'if'一样,由于property1property2不存在,我可能会得到undefined:

if (obj[property1]) {
if (obj[property1][property2]) {
if (obj[property1][property2][property3]) {
console.log('property exists!')
}
}
}

我在和数字打交道。如果property3的VALUE不为0,这将工作,因为0的计算结果为false。

{
property1: {
property2: {
property3: 0 // evaluates to false as 0 is falsy
}
}
}

如何检查对象属性是否存在,而不考虑其值?

您可以使用hasOwnProperty与可选链接:

if( obj?.property1?.property2?.hasOwnProperty("property3") ){
}

与其让嵌套条件或其他复杂的条件变得复杂,不如简单地用try/catch包装器包装对相关属性的访问。它非常干净和简单,而且可以处理任何类型的对象嵌套复杂性。

您可以通过确定未找到的属性上抛出的实际异常来改进try/catch方法,使其更健壮。否则,您可能会有其他异常,造成属性不存在的错觉,从而掩盖其他代码问题。

可以使用可选链接。

return Number.isInteger(obj?.property1?.property2?.property3)

如果property3可以是别的值,那么你可以使用Nullish Coalescing

return obj?.property1?.property2?.property3 ?? false

Nullish Coalescing是一种逻辑运算符,当其左侧操作数为空或未定义时,返回其右侧操作数。

你可以在这里阅读更多信息:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator

相关内容

  • 没有找到相关文章

最新更新