[ES10 实战] 如何利用 ES10 新特性解决 JS 中 Object.assign 函数的缺陷

阅读时长 6 分钟读完

在 JavaScript 中,Object.assign 函数经常被用来将一个或多个对象的属性和方法复制到目标对象中。然而,Object.assign 也有一些缺陷,这些缺陷可能会导致一些奇怪的行为,从而影响您的代码逻辑。在 ES10 中,新增了一些特性来解决这些问题,并增强了 Object.assign 函数的能力。在本文中,我们将重点介绍 ES10 中的新特性,并讨论如何使用它们来提高前端开发中的开发效率和代码健壮性。

Object.fromEntries

Object.fromEntries 是 ES10 中引入的一个新函数,它可以将一个包含键值对的数组转换成一个对象。从技术角度来讲,这个函数实际上是 Object.entries 的逆操作。

以下是一个简单的示例:

使用 Object.fromEntries 函数可以解决 Object.assign 函数的一个缺陷,即对象的深度复制。

在使用 Object.assign 函数时,如果源对象中包含了一个复杂对象作为属性值,那么将只复制该属性值的引用,而不是实际的对象(即浅复制)。因此,修改源对象中的属性值会同时修改目标对象中的属性值。

而在使用 Object.fromEntries 函数时,它会创建一个新对象,其中包含源对象中的所有属性值的深拷贝。因此,使用 Object.fromEntries 函数可以有效地避免对象深度复制的问题。 以下是一个示例,说明了使用 Object.fromEntries 函数的好处:

Nullish 合并运算符

在 JavaScript 中,如果一个变量的值为 null 或 undefined,那么它有时被认为是 false。而当使用 || 运算符时,如果变量的值是空字符串、0 或 false,那么该变量也会被认为是 false。这可能会导致一些奇怪的行为,甚至是代码缺陷。

ES10 新增了一个 Nullish 合并运算符 ??,该运算符只在变量的值为 null 或 undefined 时返回 true。当变量的值为 false、0 或空字符串时,?? 运算符仍然返回 false。

以下是一个简单的示例,展示了如何使用 ?? 运算符:

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

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

在使用 Object.assign 函数时,我们经常需要检查属性值是否为 null 或 undefined,以避免将这些值复制到目标对象中。在这种情况下,Nullish 合并运算符可以使代码更简洁、更易读且更可维护。

以下是一个示例,展示了如何在使用 Object.assign 函数时,结合 Nullish 合并运算符的使用:

Promise.allSettled

Promise.all 是一个经常被使用的 Promise 方法,可以将多个 Promise 对象包装成一个 Promise 对象。当所有 Promise 对象都完成(或其中一个 Promise 对象被拒绝)时,Promise.all 将返回一组结果,这些结果将与每个 Promise 的结果一一对应。

不过,Promise.all 有一个不足之处,即如果其中一个 Promise 被拒绝,那么整个 Promise 链就会被拒绝,从而导致后续的操作无法继续执行。因此,当我们运行多个异步操作时,可能需要一个更健壮的方案来处理操作的结果。

ES10 中新增了一个名为 Promise.allSettled 的方法,该方法接受一个 Promise 对象数组,并在所有 Promise 对象都完成后返回它们的状态。与 Promise.all 不同,Promise.allSettled 不会因为其中一个 Promise 被拒绝而终止。

以下是一个示例,展示了如何使用 Promise.allSettled 方法:

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

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

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

在前端开发中,我们经常需要同时发送多个异步请求,并且需要对它们的结果进行处理。在这种情况下,Promise.allSettled 可以成为一个强有力的方案,可以更好地管理多个异步请求的结果,并准确地识别可能存在的问题,从而更好地维护您的代码。

总结

在本文中,我们讨论了 ES10 中的三个新特性,以及它们如何帮助我们解决 Object.assign 函数的一些缺陷,并提高前端开发中的开发效率和代码健壮性。具体来说,我们介绍了 Object.fromEntries、Nullish 合并运算符和 Promise.allSettled,以及它们的适用场景和示例代码。

尽管这些新特性在一些浏览器中可能尚未得到完全支持,然而,它们已经成为了前端开发中的必备工具之一。因此,学习和掌握这些特性对于前端开发者来说非常重要,也将为您的工作带来更便捷和高效。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ffbb2b95b1f8cacde07cc8

纠错
反馈