在JavaScript中,要实现深拷贝和浅拷贝,可以使用以下方法:
可以使用Object.assign()方法或展开运算符(...)来实现浅拷贝。
示例:
const obj = { a: 1, b: 2 };
const shallowCopyObj = Object.assign({}, obj);
console.log(shallowCopyObj); // { a: 1, b: 2 }
可以使用递归方式或JSON.parse(JSON.stringify())方法来实现深拷贝。
示例:
// 递归方式实现深拷贝
function deepCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
const newObj = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = deepCopy(obj[key]);
}
}
return newObj;
}
const obj = { a: 1, b: { c: 2 } };
const deepCopyObj = deepCopy(obj);
console.log(deepCopyObj); // { a: 1, b: { c: 2 } }
// JSON.parse(JSON.stringify())方式实现深拷贝
const obj2 = { a: 1, b: { c: 2 } };
const deepCopyObj2 = JSON.parse(JSON.stringify(obj2));
console.log(deepCopyObj2); // { a: 1, b: { c: 2 } }
需要注意的是,递归方式实现深拷贝时,要避免循环引用的问题;而JSON.parse(JSON.stringify())方式实现深拷贝时,不支持复制函数、RegExp以及Symbol等特殊类型的值。