对象的引用类型
//对象是引用类型 类似c语言的指针
const info = {name: "m3", age:18};
const obj = info;
info.name = "damn";
console.log(obj.name); //打印damn
当创建类型为对象时,info实际是保存的是对象的内存地址,将info赋给obj,实际是将info对象的地址赋给obj,二者指向同一个对象。因此修改info的name,实际上也是修改obj的name.
对象的浅拷贝
// 对象的浅拷贝
const info = {name: "m3", age:18, friend: {name: 'kobe', height: 198}};
const obj = Object.assign({}, info);
info.name = "damn";
console.log(obj.name); //打印m3
info.friend.name = 'james';
console.log(obj.friend.name); //打印james;
利用Object.assign方法可以实现对象的浅拷贝,即第一层的属性,但如果第一层属性中含有对象属性则保存的依旧是对象的地址。
对象的深拷贝
// 对象的深拷贝
const info = {name: "m3", age:18, friend: {name: 'kobe', height: 198}};
const obj = JSON.parse(JSON.stringify(info));
info.friend.name = "james";
console.log(obj.friend.name); //打印kobe
实现对象的深拷贝可以利用JSON方法或借助loadash库