我试图评估一个对象是否具有以下特定属性,就像我直接到最后一个'if
'一样,由于property1
或property2
不存在,我可能会得到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