浅拷贝和带有JavaScript数组的深拷贝有什么区别?

16 javascript arrays

根据MDN文档,调用array.slice()将创建数组的浅表副本.

请参阅slice()的MDN链接.

但是,如果我在控制台中运行这样的简单测试:

var test = [[1,2,3],7,8,9];
var shallow_copy = test.slice();
Run Code Online (Sandbox Code Playgroud)

并检查shallow_copy,我可以看到整个二维数组似乎被复制过来.

浅拷贝和深拷贝有什么区别?如果我猜测,我会称这是一个深刻的副本.

Nie*_*sol 23

要查看差异,请尝试:

shallow_copy[0][2] = 4;
console.dir(test);
Run Code Online (Sandbox Code Playgroud)

你会看到它test已被修改!这是因为虽然您可能已将值复制到新数组,但嵌套数组仍然是相同的.

深拷贝将递归执行浅拷贝,直到所有内容都是原始副本.