gpt4 book ai didi

javascript - 为什么我的数据对象变量在我没有重新分配操纵值时被更改?

转载 作者:搜寻专家 更新时间:2023-10-30 22:54:30 26 4
gpt4 key购买 nike

我正在克隆一个变量以在我的一个函数中进行操作,并且我不会重新分配它。为什么第二个 console.log() 打印以下内容?

img1

代码如下:

console.log('BEFORE -> ', JSON.parse(JSON.stringify(vm.referenceMatrix)));

var referenceId = null;

var referenceMatrix = vm.referenceMatrix;

for (var i = 0; i < length; i++) {
referenceId = references[i].article_reference_id;

referenceMatrix[referenceId] = i + 1;
}

console.log('AFTER -> ', JSON.parse(JSON.stringify(vm.referenceMatrix)));

//vm.referenceMatrix = referenceMatrix;

如您所见,vm.referenceMatrix = referenceMatrix; 被注释掉了,这怎么可能呢?

编辑:

此代码生成与上图中相同的输出:

console.log('BEFORE -> ', JSON.parse(JSON.stringify(vm.referenceMatrix)));

var referenceId = null;

var referenceMatrixs = vm.referenceMatrix;

for (var i = 0; i < length; i++) {
referenceId = references[i].article_reference_id;

referenceMatrixs[referenceId] = i + 1;
}

console.log('AFTER -> ', JSON.parse(JSON.stringify(vm.referenceMatrix)));

//vm.referenceMatrix = referenceMatrix;

最佳答案

也许您来自不同的语言,但在 JavaScript 中 - 每个赋值都是通过引用进行的。这意味着:

const x = { value: 1};
const y = x;
y.value = 2;
console.log(x); // { value: 2 }

因为对象没有被克隆,并且引用在太变量之间共享。如果您想深度复制变量(“按值复制”,就像在 C++ 中一样),有很多方法可以做到这一点 ( What is the most efficient way to deep clone an object in JavaScript? )

关于javascript - 为什么我的数据对象变量在我没有重新分配操纵值时被更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55973732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com