为什么在 JavaScript 中会发生这种情况?

发布于 2024-12-08 17:33:56 字数 231 浏览 0 评论 0原文

今天我在javascript中遇到了这个问题,不知道为什么会发生。

var a = {
    prop: {
        bool: true
    }
};

console.log(a.prop.bool); // logs true
var b = a;
b.prop.bool = false;
console.log(a.prop.bool); // logs false ¿?

Today I came across this problem in javascript and do not know why it happens.

var a = {
    prop: {
        bool: true
    }
};

console.log(a.prop.bool); // logs true
var b = a;
b.prop.bool = false;
console.log(a.prop.bool); // logs false ¿?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

山人契 2024-12-15 17:33:56

表达式 { prop: ... } 表达式计算一次即可创建一个对象。

ab 都是对该单个对象的引用

请参阅通过引用传递与通过引用传递之间有什么区别按值传递?http://en.wikipedia.org/wiki/Reference_(computer_science)

引用在编程中被广泛使用,特别是为了有效地将大型或可变数据作为参数传递给过程,或者在各种用途之间共享此类数据。

编辑

clone from underscore 会进行浅复制。

创建对象的浅复制克隆。任何嵌套对象或数组都将通过引用进行复制,而不是重复

要创建深层副本,最简单的方法可能是序列化和反序列化。如果 a 有引用循环,这会做奇怪的事情。

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

The expression { prop: ... } expression is evaluated once to create one object.

a and b both are references to that single object.

See What's the difference between passing by reference vs. passing by value? and http://en.wikipedia.org/wiki/Reference_(computer_science)

References are widely used in programming, especially to efficiently pass large or mutable data as arguments to procedures, or to share such data among various uses.

EDIT

clone from underscore does a shallow copy.

Create a shallow-copied clone of the object. Any nested objects or arrays will be copied by reference, not duplicated.

To create a deep copy, the easiest way is probably to serialize and deserialize. This will do weird things if a has reference cycles though.

var b = JSON.parse(JSON.stringify(a));
岁月蹉跎了容颜 2024-12-15 17:33:56

您已创建对同一对象的引用。执行此操作时,变量 b 的任何更改都会影响变量 a 中存储的对象。

您需要对对象进行“克隆”来更改它,这样您就有两个对象,而不是一个具有两个引用的对象。

You've created a reference to the same object. When you do this, any changes of variable b will affect the object stored in variable a.

You will need to do a 'clone' of the object to change it so you have two objects instead of one with two references.

明明#如月 2024-12-15 17:33:56

当您将 b 分配给 a 时,分配是通过引用进行的,这意味着 b 引用内存中与 a 相同的位置,因此当 b 更新并且您观察到 a 时,看起来 a 也已更新。

when you assign b to a the assignment is by reference meaning b references the same location in memory as a so when b is updated and you observe a it looks like a is also updated.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文