一、浅拷贝的实现方法
1.Object.assign方法
let obj1={name:"aaa",}let obj2={age:20}let obj3=Object.assign(obj1,obj2)// obj3.age=30console.log(obj1);console.log(obj3);console.log(obj1==obj3);console.log(obj1===obj3);
结果为:
2.直接赋值
let obj1={name:"aaa",age:20,hobby:{life:"eat"}}let obj2=obj1obj2.name="hhh"console.log(obj1);console.log(obj2);console.log(obj1==obj2);console.log(obj1===obj2);
二、深拷贝的实现方法
1.递归
let obj1={name:"aaa",age:20,hobby:["1","2","3"]}function deepClone(obj){if(obj===null ||typeof obj!=="object"){return obj}let obj2if(obj&&typeof obj==="object"){obj2={}for(let key in obj){if(obj.hasOwnProperty(key)){obj2[key]=deepClone(obj[key])}}}if(Array.isArray(obj)){obj2=[]for(let i in obj){obj2.push(deepClone(obj[i]))}}return obj2}let obj3=deepClone(obj1)// obj3.hobby[1]=5console.log(obj3);console.log(obj1);console.log(obj1==obj3);console.log(obj1===obj3);
输出结果为:
2.json
let obj1={name:"aaa",age:20,hobby:["1","2","3"]}let obj2=JSON.parse(JSON.stringify(obj1))obj2.hobby[2]="45"console.log(obj2);console.log(obj1);console.log(obj1==obj2);console.log(obj1===obj2);
输出结果为: