我有这两个数组:
let num1 = [[1]];
const num2 = [2, [3]];
我连接这两个并创建新数组:
const numbers = num1.concat(num2);
console.log(numbers);
// results in [[1], 2, [3]]
现在我将一个新值推送到 num1:
num1[0].push(4);
console.log(numbers);
// results in [[1, 4], 2, [3]]
但是如果我写:
num1[0] = [1, 4, 5];
console.log(numbers);
// results in [[1], 2, [3]]
为什么将 vale 重新分配给 num1
不反射(reflect)数字数组的变化,但推送方法可以吗?
最佳答案
num1[0]
以一个对数组 [1]
numbers
复制该值,因此具有对同一数组的引用。
num1[0].push(4);
修改该数组(您有两个引用)
num1[0] = [1, 4, 5];
修改 num1[0]
的值,替换对原始数组以及对全新数组的引用。 numbers
仍然包含对原始数组的引用。
关于JavaScript 数组连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60028634/