JS: 关于深拷贝和浅拷贝

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS: 关于深拷贝和浅拷贝相关的知识,希望对你有一定的参考价值。

2021年9月8日

《js高级程序设计》p139中讲解Array.from()方法。该方法是对数组执行浅拷贝,后进行测试。

浅拷贝:只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
深拷贝:会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
此处加一句:浅拷贝的对象若包含子对象,当新的对象对子对象发生改变时则会使原对象子对象一同改变,若新的对象只改变第一层的数据,则源对象不会改变。
浅拷贝只是基础类型的拷贝,对于对象和数组只是复制其指针。而深拷贝是和源对象没有任何共享的,一般深拷贝通过循环遍历实现。

 1     let a1 = [1, 2, 3, 4, [true, true], { "num": 0, "sum": 1 }];
 2     let a2 = Array.from(a1);
 3     console.log(a1 == a2); //false
 4     console.log(a1 === a2); //false
 5     a1[0] = 0;
 6     a1[4][0] = false;
 7     a1[5].num = 1;
 8     console.log(a1); // [0,2,3,4,[false,true],{num:1,sum:1}]
 9     console.log(a2); //[1,2,3,4,[false,true],{num:1,sum:1}]
10     console.log(typeof (a1));//object
11     console.log(typeof (a2));//object
12     console.log(a2 instanceof Array);//true

 

以上是关于JS: 关于深拷贝和浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

前端开发:JS中深拷贝和浅拷贝的区别

关于深拷贝和浅拷贝

关于深拷贝和浅拷贝的理解

jquery怎样深拷贝一个数组

如何实现数组深拷贝和浅拷贝?

IOS 深拷贝和浅拷贝