我想知道javascript在复制对象时是做浅拷贝还是深拷贝。
const a = ['value1', 'value2'];
const b = ['value3', 'value4'];
const new_ab = [a, b];
new_ab将有新的分配值或引用?如果它是一个深拷贝,我如何才能使它成为燕子?谢谢。
发布于 2015-12-23 21:10:43
正如注释中所暗示的那样,JavaScript完全对引用进行操作,唯一的例外是原始值保留在堆栈中,因此程序不需要引用来访问它们。在您的示例中,所有变量声明都创建新值--每个都是Array的实例--但是声明数组返回的是引用,而不是数组本身。例如,[1, 2]
是一个值数组(整数),但[a, b]
是一个引用数组。
所以..。什么都不复制,。我们可以通过将对象放置为数组的元素并检查以前分配的属性是否仍然可以通过新的“父”数组访问来演示这一点。
(要在注释中回答您的问题,是的,如果您(或JavaScript)要复制值,您的示例的性能要更好。)
'use strict';
const arrayOne = [];
arrayOne.someProperty = "This string is a property of `arrayOne`, " +
"accessed via the reference to it in `arrayTwo`."
const arrayTwo = [arrayOne];
span.innerHTML = arrayTwo[0].someProperty;
<span id="span"></span>
https://stackoverflow.com/questions/34441076
复制相似问题