当前位置: 首页 > 知识库问答 >
问题:

返回未定义如果对象不存在检查属性[重复]

弓嘉纳
2023-03-14

默认行为是,尝试访问不存在的对象的属性会生成错误:

console.log(organization.name)

如果组织未定义,将生成错误。当试图访问一个不存在的对象的属性时,有没有一种方法可以改变这个默认行为并只接收未定义的?有时,它比记住检查对象是否已定义更有帮助

共有2个答案

薛晨
2023-03-14

有多种解决方案:

虽然并非所有浏览器都支持,但可选链接是最干净的解决方案。如果您需要复古兼容性,您应该使用巴贝尔或其他一些transpiler,虽然。

let organization = undefined

console.log(organization?.name)

organization = {name: "foo"}

console.log(organization?.name)
曹乐意
2023-03-14

您可以使用可选链接

可选链

可选的链接运算符?.允许读取位于连接对象链深处的属性的值,而无需明确验证链中的每个引用都是有效的。

const organization = undefined; 
console.log(organization?.name);
 类似资料:
  • 问题内容: 检查JavaScript中的对象属性是否为最佳方法是什么? 问题答案: 检查属性值是否为特殊值的通常方法是: 要检查对象是否实际上没有这样的属性,并因此在尝试访问它时默认情况下将返回: 检查与标识符关联的值是否为特殊值, 或者 尚未声明该标识符。注意:此方法是引用 未声明的标识符(注意:与的值不同)的唯一方法,且不会出现早期错误: 在ECMAScript 5之前的JavaScript版

  • 问题内容: 基本上,我需要能够做到这一点: 我正在寻找一个等于 或{get}的“全局”对象,以便为所有未定义的属性获取器返回一个空字符串(请注意,这与的属性不同)。 问题答案: 您可以创建一个a,以在访问未定义的属性时返回空字符串。 : 正如问题作者David Murdoch指出的那样,如果您使用的是节点v0.6.18(撰写本文时是最新的稳定版本),则在运行脚本时必须传递该选项: 请注意,此解决方

  • 我面临的问题是,从具有相同键的Spring可缓存方法返回的两个对象不能断言相同的测试。为什么这些对象不共享同一个存储区域? 详细信息:我正在使用redis缓存机制在spring boot REST api中实现缓存。缓存工作正常,它首先从外部提供的源(访问数据库的JPS存储库)检索数据,然后对同一缓存键的后续调用从缓存返回数据。但是,我无法在JUnit测试用例中完全模拟这种行为。My assert

  • 我正在尝试对可能存在属性的对象进行查询。但是我在获取

  • 问题内容: 在ejs模板中检查未定义属性的最佳方法是什么? (我正在使用TJ Holowaychuk 的node.js包) 例: 我希望这会导致“ foo undefined”。它确实会引发 foo undefined 错误。 我知道这不应该成为问题,因为这是测试中的预期行为。有避免这种情况的简便方法吗? 我发现的唯一解决方案是使用该方法。 这不会引发任何错误。 有没有更好的方法来保持模板清洁?还

  • 到目前为止,我已经学会了: 1) 对于循环,我可以使用它来迭代对象中的索引,例如具有数字索引键的数组。 2) 的中,循环为我提供了iterable和custom属性以及继承属性。但是,它忽略了值未定义的属性。 对于例如。 将省略索引,因为它的值是。 但是,它将迭代,和。 3) 的对值而不是键进行迭代。不同之处在于,它只迭代所有iterable属性,忽略了自定义属性,也忽略了从原型链继承的属性。但是