javascript - 将变量分配给值发出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()
解决方案
当你写 b = a 你指向同一个对象 - 数组。因为你改变了这个对象,所以使用 a 或 b 来指向这个对象并不重要。你想要做的是克隆数组,你可以写
let b = JSON.parse(JSON.stringify(a));
但是有很多方法可以做到这一点
推荐阅读
- apache-spark - Spark Streaming 窗口使用
- python - gmpy2中如何准确判断一个mpfr数是否为整数?
- django - 我无法在 django 视图中作为组织登录
- javascript - 如何在 AJAX 函数完全执行之前修复 jQuery Promise .then() 被调用?
- sharepoint - 文档级别的共享点权限?可能是个愚蠢的问题
- python - 读一个“。” 分隔文件并使用 python 创建 SQL 查询
- python - 列值不在 padas 数据框中的索引中
- arrays - 使用指针数组将输入和输出输入文件
- node.js - 设置秘密时,express-jwt 秘密应设置错误
- angular - Angular UnitTesting 不适用于自定义验证器