JavaScript 数组拼接
JavaScript array concat
我有这两个数组:
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
不会反映 numbers 数组的变化但 push 方法会?
那是因为数组是 Javascript 中的对象。 JavaScript 中的对象始终是引用,因此当您将一个数组推送到另一个数组时,您实际上是在推送一个引用,而不是一个值。
连接两个数组时,它会将值(或引用)复制到新数组。
当您设置索引 0 的值时,您实际上是在替换该引用,但旧引用仍然存在于串联数组中。
num1[0]
以数组引用的值开始 [1]
numbers
复制该值,因此具有对同一数组的引用。
num1[0].push(4);
修改 该数组(您有两个引用)
num1[0] = [1, 4, 5];
修改 num1[0]
的 值 将对原始数组的引用替换为对 全新数组的引用。 numbers
仍然包含对原始数组的引用。
我有这两个数组:
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
不会反映 numbers 数组的变化但 push 方法会?
那是因为数组是 Javascript 中的对象。 JavaScript 中的对象始终是引用,因此当您将一个数组推送到另一个数组时,您实际上是在推送一个引用,而不是一个值。
连接两个数组时,它会将值(或引用)复制到新数组。
当您设置索引 0 的值时,您实际上是在替换该引用,但旧引用仍然存在于串联数组中。
num1[0]
以数组引用的值开始 [1]
numbers
复制该值,因此具有对同一数组的引用。
num1[0].push(4);
修改 该数组(您有两个引用)
num1[0] = [1, 4, 5];
修改 num1[0]
的 值 将对原始数组的引用替换为对 全新数组的引用。 numbers
仍然包含对原始数组的引用。