在 JavaScript 中克隆对象涉及创建独立于原始对象的副本。对克隆所做的修改不应影响原始对象,反之亦然。
ES2022 引入了 StructuredClone(),提供了一种高效且标准的克隆对象的方法。它支持克隆复杂的数据结构,包括循环引用。
const clone = structuredClone(object);
对于不支持 StructuredClone() 的浏览器,需要手动克隆过程。虽然可以通过简单的赋值来克隆简单对象,但具有不可枚举属性或原型继承的复杂对象需要更严格的方法:
function clone(obj) { // Handle null, undefined, and simple types if (obj === null || typeof obj !== "object") return obj; // Clone custom Date objects if (obj instanceof Date) { return new Date(obj.getTime()); } // Clone Arrays if (obj instanceof Array) { return obj.map(clone); } // Clone Objects if (obj instanceof Object) { let clone = {}; for (const key in obj) { if (obj.hasOwnProperty(key)) { clone[key] = clone(obj[key]); } } return clone; } throw new Error("Unable to clone object. Its type is not supported."); }
此函数处理 Date 和 Array 对象的特殊情况,确保正确复制自定义属性,并跳过原型属性以防止克隆不需要的属性。
虽然这种手动克隆方法更复杂,但它提供了更大的灵活性并支持更多的数据类型与简单的作业相比。需要注意的是,它假定数据结构没有循环引用,因为克隆此类结构时可能会发生无限递归。
以上是如何在不同环境下有效克隆JavaScript对象?的详细内容。更多信息请关注PHP中文网其他相关文章!