浅谈js中深浅拷贝

家住魔仙堡 提交于 2019-11-30 00:31:47

深浅拷贝只针对像 Object, Array 这样的复杂对象的。

1、浅拷贝:是对栈内存地址的复制,实际上目标对象指针和源对象指向同一片堆内存空间;

2、深拷贝:是指建一个新的对象或数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用” 我们希望在改变新的数组(对象)的时候,不改变原数组(对象)。

实现深拷贝的方法:

(1)、 JSON内置的方法

    var a={x:1}
    var b=JSON.parse(JSON.stringfiy(a))
    console.log(b)//{x:1}
    b.x=2
    console.log(b)//{x:2}
    console.log(a)//{x:1}

原理:该方法是用JSON.parse将对象转为字符串,然后在用JSON.stringify转回对象json字符串转换为对象的时候,会自己去构建新的内存地址存放数据。

(2)、Object的内置方法assign

Object.assign:用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target),并返回合并后的target Object.assign(target, source1, source2);

    var a={x:1}
    var b=Object.assign({}, a);
    console.log(b);    //{x:1}
    b.x = 2;
    console.log(b);    //{x:2}
    console.log(a);    //{x:1}

原理:该方法是用Object.assign对对象进行拼接, 将后续对象的内容插入到第一个参数指定的对象,不会修改第一个参数之后的对象,而我们将第一个对象指定为一个匿名空对象,实现深拷贝

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!