首页 > web前端 > js教程 > 如何创建 JavaScript 对象的真正深拷贝?

如何创建 JavaScript 对象的真正深拷贝?

Patricia Arquette
发布: 2024-12-26 02:03:10
原创
749 人浏览过

How to Create a True Deep Copy of a JavaScript Object?

如何正确克隆 JavaScript 对象

克隆 JavaScript 对象是各种编程场景中的关键任务。然而,由于 JavaScript 对象系统的复杂性,创建不受原始更改影响的对象副本可能具有挑战性。

本机复制方法的陷阱

JavaScript 的本机对象分配运算符(例如,x = y)仅创建对原始对象的引用。对 x 或 y 所做的更改将影响这两个对象。此外,复制从内置 JavaScript 对象(例如数组、日期)派生的对象可能会引入不需要的属性。

综合克隆解决方案

要创建 JavaScript 对象的深层副本,请考虑以下综合解决方案:

function clone(obj) {
  if (null == obj || "object" != typeof obj) return obj;

  var copy = obj.constructor();
  for (var attr in obj) {
    if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);
  }
  return copy;
}
登录后复制

该函数采用递归方法遍历对象的属性并创建一个新对象每个属性值都有单独的实例。它处理 null、未定义和各种内置对象类型的情况,同时排除不可枚举和隐藏属性。

边缘情况和假设

虽然该解决方案涵盖了大多数场景,但它假设对象数据形成树结构,这意味着对象内不存在循环引用。此外,它需要了解对象的构造函数才能正确实例化克隆的对象。

结构化克隆(ES2022 更新)

在现代浏览器中,结构化克隆标准提供了一种更强大、更高效的方法创建对象的深层副本。 StructuredClone() 函数克隆整个对象,保留隐藏属性和循环引用。

const clone = structuredClone(object);
登录后复制

请记住,克隆对象可能是一项复杂的任务,并根据具体要求考虑每种方法的局限性您的申请。

以上是如何创建 JavaScript 对象的真正深拷贝?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板