【问题标题】:Assigning Variables to values issue Javascript [duplicate]将变量分配给值发出Javascript [重复]
【发布时间】:2020-11-22 16:29:51
【问题描述】:

有人可以解释一下,为什么代码会这样吗?我编写了一个测试函数来说明我在代码中更大规模的问题。我希望“b”保留值 [1,2,3],然后使用 math.random 函数将“a”更新为 [2,2,3]。但是两者都得到了更新,我不明白为什么。如何在不更新的情况下将值 [1, 2, 3] 保存在 b 中?

let a = [1, 2, 3]
let b = []

function assignB() {
    b = a
}

function reassignA() {
    console.log(b)  // [1, 2, 3]
    let randomNumber = Math.floor(Math.random() * a.length)
    if (a[randomNumber] == 1) {
        a[randomNumber] = 2
        console.log(b) // [2, 2, 3]
    } else {
        reassignA()
        }
    console.log(b) // [2, 2, 3]
}

function test() {
    assignB()
    reassignA()
}

test()

【问题讨论】:

  • a 和 b 在此处具有相同的数组引用。将数组分配为 'b = [...a]' 应该可以解决问题。

标签: javascript arrays let


【解决方案1】:

当您编写 b = a 时,您指向的是同一个对象 - 数组。因为你改变了这个对象,所以使用 a 或 b 来指向这个对象并不重要。你要做的是克隆数组,你可以写

let b = JSON.parse(JSON.stringify(a));

但是有很多方法可以做到这一点

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 2018-10-02
  • 2011-08-19
  • 1970-01-01
相关资源
最近更新 更多