首页 > 解决方案 > 如果ObjectB可能存在也可能不存在,如何检查ObjectA中的objectB中是否存在值

问题描述

假设我们想要变量 val 中的值。

场景一:

Var ObjectA = {ObjectB:{val:"text"}}

如果我们想在 val 中获取值,我们可以访问 like ObjectA.ObjectB.val。我们会得到"text"

场景二:

Var ObjectB = {}

如果我想在 val 中获得价值(不存在),如果我尝试像访问一样ObjectA.ObjectB.val 我们会得到

未捕获的类型错误:无法在 :1:5 读取未定义的属性“val”

规则是

  1. 我们不能将任何值设为 null 或初始化任何值,我们将简单地获取这些值并且必须使用它们。
  2. 如果ObjectB存在于ObjectA它并不意味着 val 存在于ObjectB.

我只想知道变量 val 中是否存在值而不会干扰任何其他事情。

标签: javascript

解决方案


我会通过按顺序检查每件事来做到这一点:

if(ObjectA && ObjectA.ObjectB && ObjectA.ObjectB.val) {
    // Do something with ObjectA.ObjectB.val
}

如果该结构对您来说太笨拙,那么会想到另外两种可能性:

  • 在每个阶段填写一个默认值,即((ObjectA || {}).ObjectB || {}).val
  • 仅测试最里面的值,但在try...catch块内(如果缺少外部值之一,则默默地丢弃不可避免的错误)。

但是,它们比 &&-chaining 版本更难阅读,性能也更低,所以如果你的链很长,我只会考虑它们。


推荐阅读