浅拷贝与深拷贝区别与实现

实现浅拷贝

 

浅拷贝中,浅拷贝只是拷贝了它在栈中存储的指针,它们指向的都是同一个堆内存地址,所以浅拷贝在某些情况会造成改变数据后导致别的另一份数据也同步被改变的情况;

1.for...in...

浅拷贝与深拷贝区别与实现_第1张图片

手动实现浅拷贝只需for...in...循环把oldobj里元素值遍历赋值给进新对象;

2.object.assign()

浅拷贝与深拷贝区别与实现_第2张图片

深拷贝的实现

深拷贝是直接将堆内存中存储的数据直接复制一份,不会有浅拷贝互相影响的问题。

1.递归实现

浅拷贝与深拷贝区别与实现_第3张图片

手动实现深拷贝只需封装一个函数,做一个是否为对象或者数组的判断,如果是的话就进行递归,如果是其他值直接赋值即可。

2.JSON.parse(JSON.stringify())

将一个对象先转为json字符串,然后再转回来,这样可以实现深拷贝。

但是这个方法有个缺陷,可以实现对象或数组的深拷贝,但是不能处理函数,函数经过这样处理后会变成null。

浅拷贝与深拷贝区别与实现_第4张图片

 

 

你可能感兴趣的:(es6,node.js,html5,javascript,前端)