JavaScript 数组的浅拷贝和深拷贝有什么区别?
IT技术
javascript
arrays
                    2021-02-25 01:26:13
                
            
        2个回答
            要查看差异,请尝试:
shallow_copy[0][2] = 4;
console.dir(test);
你会看到test已经修改了!这是因为虽然您可能已将值复制到新数组中,但嵌套数组仍然是相同的。
深拷贝将递归地执行浅拷贝,直到所有内容都是原始副本的新副本。
基本上,您只是获得对原始变量/数组的引用。更改引用也会更改原始数组。您需要遍历原始数组的值并形成副本。
考虑这个例子:
var orig = {  a: 'A', b: 'B', c: 'C' };
假设您要创建此副本的副本,以便即使更改原始值,也始终可以返回到原始值。
我可以做这个:
var dup = orig; //Shallow copy!
如果我们改变一个值:
dup.a = 'Apple';
此语句也a将从更改orig,因为我们有一个浅拷贝,或对 var 的引用orig。这意味着,您也会丢失原始数据。
但是,通过使用原始orig变量的属性创建一个全新的变量,您可以创建一个深层副本。
var dup = { a: orig.a, b: orig.b, c: orig.c }; //Deep copy!
现在如果你改变dup.a,它只会影响dup而不是orig。