区分
B复制了A的值,如果A被修改,B的值也被改变,那就是浅拷贝。
如果B的值没有跟着修改,那就是深拷贝
深浅拷贝的方式
1、遍历赋值
2、Object.create()
3、JSON.parse()和JSON.stringify()
浅拷贝-遍历
let a = {
name:"jack",
obj:{
str:"ccc",
arr:[1,2,3]
},
arr:[4,5,6]
}
let b = {};
for(let i in a){
b[i] = a[i];
}
// console.log(a);
a.arr[1] = "aaa";
console.log(b);
深拷贝-递归
let a = {
name:"jack",
obj:{
str:"ccc",
arr:[1,2,3]
},
arr:[4,5,6]
}
function deepclone(startobj,endobj){
let obj = endobj || {};
for(let i in startobj){
if(typeof startobj[i] === "object"){
obj[i] = startobj[i].constractor === Array ? [] : {};
deepclone(startobj[i],obj[i]);
}else{
obj[i] = startobj[i];
}
}
return obj;
}
let b = deepclone(a);
console.log(a);
console.log(b);
a.obj.str = "nerwwww";
console.log(a);
console.log(b);
深拷贝-JSON.parse、JSON.stringfy
let a = {
name:"jack",
obj:{
str:"ccc",
arr:[1,2,3]
},
arr:[4,5,6]
}
let b = JSON.parse(JSON.stringify(a));
console.log(a);
console.log(b);
a.obj.str = "nerwwww";
console.log(a);
console.log(b);
文章介绍了JavaScript中浅拷贝和深拷贝的区别,通过遍历赋值、Object.create()、递归以及JSON.parse()和JSON.stringify()四种方式实现深浅拷贝,并提供了示例代码来展示它们在对象和数组复制中的行为。
675

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



