克隆 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、未定义和各种内置对象类型的情况,同时排除不可枚举和隐藏属性。
虽然该解决方案涵盖了大多数场景,但它假设对象数据形成树结构,这意味着对象内不存在循环引用。此外,它需要了解对象的构造函数才能正确实例化克隆的对象。
在现代浏览器中,结构化克隆标准提供了一种更强大、更高效的方法创建对象的深层副本。 StructuredClone() 函数克隆整个对象,保留隐藏属性和循环引用。
const clone = structuredClone(object);
请记住,克隆对象可能是一项复杂的任务,并根据具体要求考虑每种方法的局限性您的申请。
以上是如何创建 JavaScript 对象的真正深拷贝?的详细内容。更多信息请关注PHP中文网其他相关文章!