说明
深克隆:所有元素或属性均完全复制,与原对象完全脱离,也就是所有对于新对象的修改都不会反应到原对象中。修改克隆后的数据不会影响源数据。
浅克隆:直接将存储在栈中的值赋值给对应变量,如果是基本数据类型,则直接赋值对应的值,如果是引用类型,则赋值的是地址。修改克隆后的数据源数据也会被修改。
实现
深克隆实现
//深克隆
function clone(obj){
let buf;
if(obj instanceof Array){
buf = [];
let i = buf.length;
while(i--){
buf[i] = clone(obj[i]);
}
return buf;
}else if(obj instanceof Object){
buf = {};
for(let k in obj){
buf[k] = clone(obj[k]);
}
return buf;
}else{
return obj;
}
}
浅克隆实现
- 只复制第一层
//浅克隆
function clone(obj){
let buf;
if(obj instanceof Array){
buf = [];
let i = buf.length;
while(i--){
buf[i] = obj[i];
}
return buf;
}else if(obj instanceof Object){
buf = {};
for(let k in obj){
buf[k] = obj[k];
}
return buf;
}else{
return obj;
}
}
- Object.assign方法
//es6 的Object.assign属于浅克隆
var obj = {
a: 1,
b: 2
}
var obj1 = Object.assign(obj);
obj1.a = 3;
console.log(obj.a) // 3
- 直接用=赋值
let a=[0,1,2,3,4],
b=a;
console.log(a===b);//true
a[0]=1;
console.log(a,b);//[1,1,2,3,4][1,1,2,3,4]
本文深入探讨了深克隆和浅克隆的概念,解释了两者之间的主要区别,并提供了JavaScript实现的示例代码。通过对比,读者可以理解深克隆如何完全复制对象的所有属性,而浅克隆仅复制对象的第一层属性。
2541

被折叠的 条评论
为什么被折叠?



