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
。