js深浅拷贝:保证赋值后改变第二个变量的值,不影响第一个变量的值
在JavaScript中实现深浅拷贝,可以使用递归方式来复制嵌套的对象和数组,这样可以创建一个新的对象或数组,其中包含原始对象或数组的深拷贝。浅拷贝只复制当前层级的对象或数组。
深拷贝的例子代码如下:
function deepClone(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] = deepClone(item);
return arr;
}, []);
}
if (obj instanceof Object) {
return Object.keys(obj).reduce((newObj, key) => {
newObj[key] = deepClone(obj[key]);
return newObj;
}, {});
}
}
// 使用示例
const original = { a: 1, b: { c: 2 } };
const copy = deepClone(original);
console.log(original.b.c); // 输出:2
copy.b.c = 3;
console.log(original.b.c); // 输出:2,不受copy影响,保证了深拷贝
浅拷贝的例子代码如下:
function shallowClone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (obj instanceof Array) {
return [...obj];
}
if (obj instanceof Object) {
return { ...obj };
}
}
// 使用示例
const original = { a: 1, b: { c: 2 } };
const copy = shallowClone(original);
console.log(original.b.c); // 输出:2
copy.b.c = 3;
console.log(original.b.c); // 输出:3,原对象的嵌套对象被修改,不满足要求
在实际应用中,根据数据结构的复杂性和性能要求,可以选择合适的拷贝方式。深拷贝会创建所有子对象的新副本,而浅拷贝则只复制最外层的对象或数组。
评论已关闭