JavaScript,检查嵌套对象属性为null/未定义的优雅方法

在JavaScript中,访问嵌套对象的属性时,我们可能会遇到一些问题。如果某个属性不存在或者为null/未定义,那么在对它进行操作时就会抛出TypeError异常。为了解决这个问题,我们需要一种优雅的方法来检查嵌套对象属性是否存在。

传统方法的缺陷

通常情况下,我们使用if语句来检查嵌套对象属性是否存在。例如:

-- ---- -- --------- -- --------------- -- ---------------------- -
  -- ----------------- 
-

这种方法的缺点是它太过冗长和不够优雅。当我们需要检查多个属性时,代码会变得非常臃肿。此外,如果我们使用逻辑“或”(||)运算符来设置默认值,则该代码将更加复杂。

优雅的方法:可选链操作符

ES2020引入了一个新的特性-可选链操作符(Optional Chaining Operator)。使用可选链操作符,我们可以更加优雅地检查嵌套对象属性是否存在。

-- -------------------------- -
  -- ----------------- 
-

在这个例子中,如果obj、prop1、prop2或prop3中的任何一个属性不存在,则不会抛出TypeError异常。如果所有属性都存在,代码块将被执行。

另一个优点是它可以轻松地与逻辑“或”(||)运算符一起使用,以设置默认值:

----- ---------- - ------------------------ -- ----------

在此示例中,如果prop3不存在,则prop3Value将被设置为'default'。

适用性和注意事项

可选链操作符在访问嵌套对象时非常有用。但是,请注意这些操作符仅在支持ES2020的浏览器和Node.js版本中可用。对于旧版JavaScript环境,我们需要回退到传统的if语句检查方法。

另外,在使用可选链操作符时,有两个注意点:

  • 我们不能在函数调用上使用可选链操作符。例如,obj?.func()是无效的。
  • 可选链操作符只能在访问对象属性时使用,而不能用于数组元素的索引。例如,arr?.[0]是无效的。

结论

在这篇文章中,我们介绍了使用可选链操作符来检查嵌套对象属性是否存在的优雅方法。通过使用可选链操作符,我们可以使代码更加简洁和易读。同时,我们也需要注意它的适用性和注意事项。

示例代码如下:

----- --- - -
  ------ -
    ------ -
      ------ -------
    -
  -
--

-- -------------------------- -
  -----------------------------------
-

----- ---------- - ------------------------ -- ----------
------------------------

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/13924


猜你喜欢

  • 获取子节点索引

    在前端开发中,经常需要获取DOM元素的子节点,并进行操作。而要准确地获取某个特定子节点,我们需要知道它的索引。 本文将介绍如何通过JavaScript获取DOM元素的子节点索引,并提供示例代码。

    7 年前
  • 如何将变量的值复制到另一个变量中

    在前端开发中,经常需要将一个变量的值赋给另一个变量。这是一种非常基础的操作,但也有些细节需要注意。本文将介绍如何正确地将变量的值复制到另一个变量中,并提供示例代码和指导意义。

    7 年前
  • 如何移动光标到 contenteditable 实体的末尾

    在 Web 开发中,contenteditable 是一个非常有用的属性,它使得用户能够像在富文本编辑器一样直接编辑 HTML 元素。然而,在使用 contenteditable 时,我们可能会遇到一...

    7 年前
  • 删除单击时输入文本的默认值

    在前端开发中,有时我们需要在输入框或文本域中设置默认值,以便用户更好地理解该字段的预期输入值。然而,在用户单击输入元素后,这些默认值会自动被删除,从而干扰用户的输入体验。

    7 年前
  • 缩放画布到鼠标光标

    在前端开发中,常常需要对页面上的画布进行缩放操作。当我们进行缩放时,有时候希望能够将缩放中心设置为鼠标光标所在的位置,这样用户就可以更加方便地进行缩放操作。本文将介绍如何通过 JavaScript 实...

    7 年前
  • 修改推特引导崩溃插件保持手风琴开放

    简介 推特引导崩溃插件是一个在浏览器上运行的 JavaScript 插件,它可以通过向用户展示假的警告信息来诱骗他们在浏览器中执行恶意代码。手风琴效果是一种常见的在网站中应用的交互效果,它可以将页面上...

    7 年前
  • 只允许数字输入文本框中的实现方法

    在前端开发中,我们经常需要对用户输入进行验证和过滤。其中一个常见的需求是只允许数字输入文本框中。本文将介绍几种实现方法,并提供代码示例。 方法一:使用正则表达式过滤非数字字符 最常见的方法是通过正则表...

    7 年前
  • 如何在 Node.js 中获取瞬时时间?

    在 Node.js 中获取时间的方法有很多种,其中一种是获取当前时间的瞬时,也就是从 UTC 时间 1970 年 1 月 1 日 00:00:00 开始到现在的毫秒数。

    7 年前
  • 从 JavaScript 对象中选择随机属性

    在前端开发中,我们经常需要从一个对象中随机选择一个属性。这个功能在游戏开发、数据可视化等领域中尤为常见。本文将介绍如何使用 JavaScript 实现从对象中随机选择属性的功能。

    7 年前
  • 如何在JavaScript字符串中放置变量?

    在开发前端应用程序时,经常需要将变量的值嵌入到字符串中。JavaScript提供了几种方法可以在字符串中放置变量。本文将介绍使用节点js创建JavaScript字符串的不同方法,并提供有关每种方法的详...

    7 年前
  • 在contenteditable精确拖放

    在前端开发中,contenteditable是一个非常有用的功能,它可以让用户编辑页面中的文本内容。然而,在使用contenteditable时,可能会遇到一些问题,例如拖放不准确的情况。

    7 年前
  • 什么是“顶级JSON数组”,为什么它们是安全风险?

    介绍 在前端开发中,我们经常会使用 JSON 数据格式来传递数据。通常情况下,JSON 数据都以对象形式出现,但是也有一种特殊的情况,就是“顶级JSON数组”。 所谓“顶级JSON数组”,指的是将一个...

    7 年前
  • 返回函数*(){…}是什么意思? [重复]

    返回函数*(){…}是什么意思? [重复] 在前端开发中,我们经常会看到类似下面这样的代码片段: --------- ----- - ----- -- ----- -- ----- -- ...

    7 年前
  • RequireJS 如何实现懒加载

    在前端开发中,懒加载可以提高网站性能和用户体验。RequireJS 是一个模块加载器,它可以帮助我们实现模块的懒加载。下面将介绍如何使用 RequireJS 实现懒加载。

    7 年前
  • 在WebSockets使用JavaScript的视频流

    在前端开发中,实时性和互动性是非常重要的。WebSockets是一种新型的协议,它可以在浏览器和服务器之间建立一个全双工通信的连接,以实现实时数据交换。其中最常用的应用场景就是实时视频流传输。

    7 年前
  • VS代码:“因为生成的代码没有找到断点被忽略”错误解决方法

    在前端开发中,我们经常会使用VS Code进行代码调试。但是,在调试过程中可能会遇到 "因为生成的代码没有找到断点被忽略" 这个错误信息。这个问题通常是由于源代码和编译后的代码不匹配引起的。

    7 年前
  • jQuery插件模板——最佳实践、约定、性能和内存影响

    在前端开发中,jQuery是一个非常流行的JavaScript库。它提供了许多实用的功能,使得操作DOM更加容易。而编写jQuery插件则是一种非常方便的方式来封装可重复使用的代码,增强代码的可维护性...

    7 年前
  • HTTP基本身份验证“注销”

    在HTTP基本身份验证中,用户可以通过输入用户名和密码的方式进行认证。然而,在某些情况下,需要提供一种方法使用户能够注销其身份验证信息,以便他们可以重新登录或更换其他账户。

    7 年前
  • 用JavaScript进行自动化单元测试

    在前端开发中,自动化单元测试是确保代码质量和稳定性的重要手段。本文将介绍如何使用JavaScript进行自动化单元测试,并提供相关示例代码。 单元测试简介 单元测试是指对软件中最小可测试单元进行测试,...

    7 年前
  • 如何将DOM节点列表转换为JavaScript中的数组?

    在前端开发中,我们经常需要从DOM树中获取一组元素,并对它们进行操作。通常情况下,这些元素都是由相同的标签名或类名所组成,而且它们会以一个NodeList(节点列表)的形式返回。

    7 年前

相关推荐

    暂无文章