javascript - 如果ObjectB可能存在也可能不存在,如何检查ObjectA中的objectB中是否存在值
问题描述
假设我们想要变量 val 中的值。
场景一:
Var ObjectA = {ObjectB:{val:"text"}}
如果我们想在 val 中获取值,我们可以访问 like ObjectA.ObjectB.val
。我们会得到"text"
场景二:
Var ObjectB = {}
如果我想在 val 中获得价值(不存在),如果我尝试像访问一样ObjectA.ObjectB.val
我们会得到
未捕获的类型错误:无法在 :1:5 读取未定义的属性“val”
规则是
- 我们不能将任何值设为 null 或初始化任何值,我们将简单地获取这些值并且必须使用它们。
- 如果
ObjectB
存在于ObjectA
它并不意味着 val 存在于ObjectB
.
我只想知道变量 val 中是否存在值而不会干扰任何其他事情。
解决方案
我会通过按顺序检查每件事来做到这一点:
if(ObjectA && ObjectA.ObjectB && ObjectA.ObjectB.val) {
// Do something with ObjectA.ObjectB.val
}
如果该结构对您来说太笨拙,那么会想到另外两种可能性:
- 在每个阶段填写一个默认值,即
((ObjectA || {}).ObjectB || {}).val
- 仅测试最里面的值,但在
try...catch
块内(如果缺少外部值之一,则默默地丢弃不可避免的错误)。
但是,它们比 &&-chaining 版本更难阅读,性能也更低,所以如果你的链很长,我只会考虑它们。
推荐阅读
- r - 为什么我无法在这些 ifelse 语句中识别 NA?
- python - Python 无法识别替换命令
- javascript - 带有 Asp.net Core Mvc 的 Java 脚本模块(导入/导出)
- keras - 如何在 tf2.x 中使用 keras 的 tfrecord
- ruby - 在 Ruby 中的 `do..end` 块和花括号中不同的 `puts` 行为
- node.js - 用于身份验证的凭据没有权限
- r - (R) 列均值适用于一个命令,但不适用于另一个命令
- refresh-token - 刷新令牌时Xero-Api PHP身份验证不成功
- javascript - Vue2.x:如何使用自定义函数动态渲染元素?
- google-bigquery - 从财政年度中提取季度为真或假