js——浅拷贝和深拷贝
浅拷贝和深拷贝是编程中处理对象复制的两种方式。浅拷贝复制了对象的最外层,而深拷贝则递归地复制了对象的所有层级。
JavaScript中实现浅拷贝的方法有:
- 使用
Object.assign()
方法:
let obj = { a: 1, b: 2 };
let shallowCopy = Object.assign({}, obj);
- 使用展开运算符(
...
):
let obj = { a: 1, b: 2 };
let shallowCopy = { ...obj };
深拷贝通常需要递归地复制嵌套的对象。一个简单的深拷贝实现可以使用JSON.parse(JSON.stringify())
,但这种方法不能复制函数、undefined、循环引用等。
function deepCopy(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (obj instanceof Date) {
return new Date(obj.getTime());
}
if (obj instanceof Array) {
return obj.reduce((arr, item, i) => {
arr[i] = deepCopy(item);
return arr;
}, []);
}
if (obj instanceof Object) {
return Object.keys(obj).reduce((newObj, key) => {
newObj[key] = deepCopy(obj[key]);
return newObj;
}, {});
}
}
let obj = { a: 1, b: { c: 3 } };
let deepCopyObj = deepCopy(obj);
注意:deepCopy
函数不能保证数据安全,应当在数据安全要求不高,且确保所有对象键值对都是可以序列化和反序列化的场景下使用。
评论已关闭