有一些关于如何检查对象属性是否存在的问题在S.O.上得到了解答。示例答案是使用Object.prototype.hasOwnProperty()
。
然而,如果要检查潜在未定义对象的属性,该怎么办?
如果试图直接检查未定义对象上的属性是否存在,则会出现引用错误。
从语义上讲,似乎最好直接检查代码if (obj.prop) //dosomething
——这显示了更清晰的意图。有没有办法实现这个呢?最好,是否有内置的Javascript方法或约定可以做到这一点?
动机:一个包添加了属性user.session.email——但我正在检查电子邮件是否存在,而不是会话,尽管会话可能不存在。
更新: 很多答案都建议使用&&运算符进行短路。我知道这是一种可能的解决方案,但它并不完全符合要求,因为它似乎是在绕过JS对象语法——也就是说,虽然你想真正检查对象上的属性,但你被迫检查对象是否存在才能这样做。
注意:已标记为关闭 为什么要将其标记为关闭?假设这是一个重复的链接可能不会得到相同的答案。我们正在寻找更好、更语义化的解决方案,而将其关闭则意味着“嵌套”等于“可能未定义”。
这个问题有争议:自从最近有一个提案被提出进入阶段1here,可以解决这个问题。同样,这个问题希望有一个更语义化的解决方案,就像提案中所示。
obj && obj.prop
。 - Sebastian Simonobj
变量肯定会存在,但可能具有undefined
值吗?顺便说一下,测试if (obj.prop)
并不测试属性是否存在,它测试的是属性是否存在且具有真值。 - nnnnnn