【问题标题】:JavaScript array concat [duplicate]JavaScript数组连接[重复]
【发布时间】:2020-02-02 17:19:29
【问题描述】:

我有这两个数组:

    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 arrays push concat


【解决方案1】:

num1[0] 以引用数组 [1] 的值开头

numbers 复制该值,因此具有对同一数组的引用。

num1[0].push(4); 修改那个数组(你有两个引用)

num1[0] = [1, 4, 5]; 修改了num1[0],将对原始数组的引用替换为对全新数组的引用。 numbers 仍然包含对原始数组的引用。

【讨论】:

    【解决方案2】:

    这是因为数组是 Javascript 中的对象。而且 JavaScript 中的对象总是引用,所以当你将一个数组推送到另一个数组时,你实际上是在推送一个引用,而不是一个值。

    当你连接两个数组时,它会将值(或引用)复制到一个新数组中。

    当您设置索引 0 的值时,您实际上是在替换该引用,但旧的引用仍然存在于串联数组中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-30
      • 2022-09-23
      • 2021-02-05
      • 2021-06-25
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多