浅拷贝依次遍历内容,依次赋值
var p={
name:"zhuyu",
age:20
};
var k={
};
console.log(p);
console.log(k);
for(let key in p){
k[key]=p[key];
}
console.log(p);
console.log(k);
使用Object.assign()方法,这个方法的作用
<script>
//方法二:使用Object原型方法
var p={
name:"zhuyu",
age:20
};
var k={
weight:"120",
height:175
};
console.log("方法二打印---------------------")
Object.assign(k,p);
console.log(p);
console.log(k);
</script>
问题来,你这样依次拷贝出现的问题就是对象里面含有对象或者数组,Date等属性,又会出现只拷贝地址的情况,解决方法只有采用递归的方式拷贝。
var o = {
name: "zhuyu",
age: 21,
ts: {
weight: 50,
height: 180,
arr: [15, 4, 5, 6]
}
}
var b = {
}
function isObject(obj) {
return obj instanceof Object;
}
function deepCopy(fa, fb) {
for (let key in fb) {
if (!isObject(fb[key])) {
fa[key] = fb[key]
} else {
tempConstruc = new fb[key].constructor;
deepCopy(tempConstruc, fb[key]);
fa[key] = tempConstruc;
}
}
}
deepCopy(b, o);
var arr1 = [1, 4, 8];
var arr2 = [];
deepCopy(arr2, arr1)
console.log(arr2);
console.log(b);
深拷贝第二种封装:
<script>
function copy(obj1, obj2) {
for (let i in obj1) {
if (typeof obj1[i] == "object") {
obj2[i] = (obj1[i].constructor == Array) ? [] : {};
copy(obj1[i], obj2[i])
} else {
obj2[i] = obj1[i];
}
}
};
var a = {
name: "zhuyu",
age: 21,
uni: {
first: 1,
second: 2
}
}
var b = {};
copy(a, b);
console.log(a);
console.log(b);
</script>
效果: