所以在 SO 上有一些问题可以回答如何检查对象的属性是否存在。 示例 答案是使用 Object.prototype.hasOwnProperty()
。
但是,您将如何检查潜在未定义对象的属性?
如果有人试图直接检查未定义对象上是否存在属性,那么这将是一个引用错误。
从语义上讲,直接检查代码似乎更好 if (obj.prop) //dosomething
它显示了更清晰的意图。有什么办法可以做到这一点?最好是有内置的 Javascript 方法来做这样的事情还是按照惯例?
动机: 一个包添加了属性 user.session.email——但我正在检查电子邮件是否存在,而不是会话,尽管会话可能不存在。
更新: 许多答案都说使用 && 运算符来短路。我知道这是一个可能的解决方案,但它并不是我们所需要的,因为我们似乎正在围绕 JS 对象语法工作——也就是说,虽然你真的想检查一个对象的属性,您被迫检查该对象是否存在才能这样做。
标记为已关闭的注意事项 为什么将其 标记为已关闭?假设这是重复的链接可能不会产生相同的答案。我们正在寻找更好、更语义化的解决方案,并将此标记为关闭会假设“嵌套”===“可能未定义”。
这个问题有争议地结束了: 因为我现在无法回答我自己的问题。最近, 这里 的第一阶段提出了一项解决这个问题的提案。同样,该问题需要一个更具语义的解决方案,如提案中所示。
原文由 steviesh 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您确定父对象存在,则:
但是,如果
obj
不存在,这个例子将会失败。…这就是为什么您可能想在检查属性时检查对象是否已定义。这可确保在满足条件且尚未设置属性对象时不会出现运行时错误。
您会注意到上面的示例没有抛出异常。
这是一种更具防御性的方法,但它允许可移植性。如果您想将您的逻辑提取到一个模块中以供重用,您可能想要检查该对象是否也存在,或者冒着您可能不一定关心的应用程序区域出现意外错误的风险。