//基础数据类型变量和值都存储在栈中,引用数据类型变量存储在栈中,值存储在堆中
//引用数据类型浅拷贝是存储地址没有发生改变,指向的是同一个堆,深拷贝是新开辟了一个堆。
// 判断深拷贝还是浅拷贝,假设B复制了A,A发生了变化,B也随之发生改变,就是浅拷贝;若B没变,则是深拷贝
let obj = {
name: "jine",
sex: "男",
car: ["奔驰", "宝马", "奥迪"],
dog: {
name: "大黄",
age: 3,
color: "yellow"
}
}
let copyobj = {};
function extend(a, b) {
// 分三种情况
for (let key in a) {
// 1.如果是数组
if (a[key] instanceof Array) {
b[key] = [];
extend(a[key], b[key]);
}
// 2.如果是对象
else if (a[key] instanceof Object) {
b[key] = {};
extend(a[key], b[key]);
}
// 3.如果是字符串/数字
else {
b[key] = a[key];
}
}
}
extend(obj, copyobj)
obj.car.pop();
console.log(obj);
console.log(copyobj);