在Javascript中分配对象:浅或深拷贝?

时间:2015-12-23 17:45:31

标签: javascript

我想知道在复制对象时javascript是执行浅拷贝还是深拷贝。

const a = ['value1', 'value2'];
const b = ['value3', 'value4'];
const new_ab = [a, b];

new_ab 会有新的分配值还是引用?如果是深拷贝,我怎么能让它吞下去?感谢。

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,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>
&#13;
&#13;
&#13;