对象的引用-浅拷贝-深拷贝

65 阅读1分钟

对象的引用类型

    //对象是引用类型 类似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库