首页 > 解决方案 > 将变量分配给值发出Javascript

问题描述

有人可以解释一下,为什么代码会这样吗?我编写了一个测试函数来说明我在代码中更大规模的问题。我希望“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()

标签: javascriptarrayslet

解决方案


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

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

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


推荐阅读