如果第二个数组是从第一个数组创建的,那么两个数组有哪些依赖关系?

Which dependence do two arrays have if second array was created from the first array?

我正在创建两个数组,第一个包含条目,第二个为空。 我正在分配一个单元格,第一个 array[0] 到第二个数组。我正在为第二个数组应用方法 pop()。为什么单元格,第一个数组也改变了它的值?

var t = [[1,1,1], [1,1,1,1,1], [1,1,1,1]];
var t1 = t[0];
t1.pop();
console.log(t[0]);

我得到:

[
  1,
  1
]

为什么会这样?

pop()

The pop() method removes the last element from an array and returns that element. This method changes the length of the array.

var t = [[1,1,1], [1,1,1,1,1], [1,1,1,1]];
var t1 = t[0];
t1.pop(); // this is modifying the array in t[0]
console.log(t[0]);

为避免这种情况,您可以在执行函数之前创建一个副本pop()

var t = [[1,1,1], [1,1,1,1,1], [1,1,1,1]];
var t1 = t[0].slice(); // Creating a copy of array in t[0]
t1.pop();
console.log(t[0]);

我想阐明这个问题的另一个方面。

数组 是JavaScript 中的引用类型。这意味着指针用于在javascript中定位内存中的数组。所以当你分配

var t1 = t[0];

你正在将 t[0] 指向的 same memory address 分配给 t1。所以,t[0]t1 基本上指向 [=] 中的同一个数组16=]。这就是为什么当从 t1 中弹出值时,它会影响 t[0] also.That 指向的相同数组,这就是为什么 t[0] 值也发生变化的原因。