Javascript 如果objectB可能存在也可能不存在,如何检查ObjectA内部的objectB中是否存在值
假设我们想要变量val中的值 情景1:Javascript 如果objectB可能存在也可能不存在,如何检查ObjectA内部的objectB中是否存在值,javascript,Javascript,假设我们想要变量val中的值 情景1: Var ObjectA = {ObjectB:{val:"text"}} 如果我们想在val中获取值,我们可以像ObjectA.ObjectB.val那样访问。 我们将得到“文本” 情景2: Var ObjectB = {} 如果我想在val中获取值(它不在那里),如果我试图像ObjectA.ObjectB.val那样访问 我们会找到的 未捕获的TypeError:无法读取未定义的属性“val” 时间:1:5 规则是 我们不能将任何值设为null或初始
Var ObjectA = {ObjectB:{val:"text"}}
如果我们想在val中获取值,我们可以像ObjectA.ObjectB.val
那样访问。
我们将得到“文本”
情景2:
Var ObjectB = {}
如果我想在val中获取值(它不在那里),如果我试图像ObjectA.ObjectB.val那样访问
我们会找到的
未捕获的TypeError:无法读取未定义的属性“val”
时间:1:5
规则是
我们不能将任何值设为null或初始化任何值,我们只需获取这些值,并且必须使用它们
如果ObjectB
存在于ObjectA
中,并不意味着val存在于ObjectB
中
我只想知道变量val中是否存在一个值,而不影响其他任何事情。我会按顺序检查每件事情:
if(ObjectA && ObjectA.ObjectB && ObjectA.ObjectB.val) {
// Do something with ObjectA.ObjectB.val
}
如果这种构造对您来说太笨拙,那么您会想到另外两种可能性:
- 在每个阶段填写默认值,即
((ObjectA | |{}).ObjectB |{}).val
- 只测试最里面的值,但在
try…catch
块中(如果缺少一个外部值,则默默地放弃不可避免的错误)
但是,这些都比读链版本更难读,性能也比较差,所以如果你的链很长,我只会考虑它们。
如果你要找的键太过嵌套,你可以使用一个来自Load的工具(如果密钥不存在,你也可以添加一个默认值)。
无论哪种方式,您都可以这样检查是否存在:
让myVal=null;
如果(ObjectA&&ObjectA.ObjectB&&ObjectA.ObjectB.val)myVal=val代码>为什么不能直接链接访问?ObjectA&&ObjectA.ObjectB&&ObjectA.ObjectB.val或使用任何基于路径的库等的等效对象?不要执行“规则是”。那是代码高尔夫。堆栈溢出不适用于代码高尔夫。@zixuan由于非客观评分标准,这将作为代码高尔夫的非主题立即关闭…@PatrickRoberts显然,您可以看到“规则是”。我不是说这应该迁移到代码高尔夫,我只是说我会把问题的这一部分改成不同的东西。有了它,可以简化为ObjectA?.ObjectB?.val
@PatrickRoberts,这个建议在web浏览器中有任何支持吗?我不知道,但有一种方法允许您在已经在开发代码库的项目中使用它传送。