Assigning objects in Javascript: shallow or deep copy?
本问题已经有最佳答案,请猛点这里访问。
我想知道在复制对象时,javascript是进行浅拷贝还是深度拷贝。
1 2 3 | const a = ['value1', 'value2']; const b = ['value3', 'value4']; const new_ab = [a, b]; |
新属性将有新的分配值或引用?如果这是一个深刻的副本,我怎么能让它被吞咽?谢谢。
正如注释中所提到的,javascript完全对引用进行操作,唯一的例外是原始值保留在堆栈上,因此程序不需要引用来访问它们。在您的示例中,所有变量声明都创建新的值-每个值都是数组的一个实例-但是声明数组返回的是引用,而不是数组本身。例如,
所以…没有复制任何内容。我们可以通过将对象作为数组的元素放置,并检查以前分配的属性是否仍然可以通过新的"父"数组访问来演示这一点。
(要在注释中回答您的问题,是的,您的示例比(或javascript)要复制值时更具性能。)
1 2 3 4 5 6 7 8 9 10 | '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; |
1 | <span id="span"></span> |