Javascript

JS: 关于深拷贝和浅拷贝

本文主要是介绍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: 关于深拷贝和浅拷贝的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!