一、浅拷贝
1、通过for in遍历实现
var obj = { name: "水电费", sex: "男", hobby: ["就是繁花似锦", "涟漪"] };
var obj1 = {};
for (let k in obj) {
obj1[k] = obj[k]
}
console.log(obj1)
输出如下

obj1.hobby[0]="简单的"
console.log(obj)
输出如下 改变obj1的引用类型会改变原来的值

obj1.name="我的值"
console.log(obj)
改变obj1的原始类型不会改变obj原来的值

2、通过object.assign方法实现
var obj = { name: "水电费", sex: "男", hobby: ["就是繁花似锦", "涟漪"] };
var obj2 = Object.assign({}, obj);
console.log(obj2);
输出如下:

obj2.name="程序员"; //原始类型
obj2.hobby[1]="学习"; //引用类型
console.log(obj2);
console.log(obj);

二、深拷贝
1、通过循环遍历
var obj ={
name:"嘻嘻",
age:"25",
alip:["学会", "程序", "css"]
};
function fn(obj){
var newObj = obj instanceof Array ? [] : {}
for(let k in obj){
newObj[k] = typeof obj[k] === "object" ? fn(obj[k]) : obj[k];
}
newObj.name="心塞";
newObj.alip=["学会1", "程序", "css"];
return newObj;
}
不会改变原先的任何数据

2、先用JSON.stringify方法把对象转换为字符串
在用JSON.parse()方法把字符串转为对象
var obj = {
name: "嘻嘻",
age:"25",
alip: ["学会", "程序", "css"]
}
var obj1 = JSON.stringify(obj);
var obj2 = JSON.parse(obj1);
console.log(obj);
console.log(obj2);
输出如下:

下面我们试着改变obj2.name
obj2.name="我变化了";
输出如下:
