2026-10-26 23:13:57
JavaScript中的深拷贝可以通过多种方式实现,每种方法都有其优缺点和适用场景。以下是几种常见的实现方法及其详细说明:
1. JSON方法使用JSON.parse()和JSON.stringify()是最简单的深拷贝方法,但有其局限性。
function jsonClone(obj) { return JSON.parse(JSON.stringify(obj));}var original = { a: 1, b: { c: 2 } };var cloned = jsonClone(original);优点:
缺点:
通过递归遍历对象的所有属性,逐个进行拷贝,可以处理嵌套对象和数组。
function deepClone(obj, hash = new WeakMap()) { if (obj === null || typeof obj !== 'object') { return obj; } if (hash.has(obj)) { return hash.get(obj); } let clone; if (obj instanceof Date) { clone = new Date(obj); } else if (obj instanceof RegExp) { clone = new RegExp(obj); } else if (Array.isArray(obj)) { clone = []; hash.set(obj, clone); obj.forEach((item, index) => { clone[index] = deepClone(item, hash); }); } else { clone = Object.create(Object.getPrototypeOf(obj)); hash.set(obj, clone); for (let key in obj) { if (obj.hasOwnProperty(key)) { clone[key] = deepClone(obj[key], hash); } } } return clone;}var original = { a: 1, b: { c: 2 } };var cloned = deepClone(original);优点:
缺点:
一些成熟的第三方库提供了深拷贝功能,如Lodash的_.cloneDeep()。
var _ = require('lodash');var original = { a: 1, b: { c: 2 } };var cloned = _.cloneDeep(original);优点:
缺点:
structuredClone是现代浏览器提供的原生深拷贝方法。
var original = { a: 1, b: { c: 2 } };var cloned = structuredClone(original);优点:
缺点:
选择哪种方法取决于具体的使用场景和需求。