为什么这会在javascript中发生?

Dat*_*osh 3 javascript reference

今天我在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 ¿?
Run Code Online (Sandbox Code Playgroud)

Mik*_*uel 5

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

a并且b两者都是对该单个对象的引用.

请参阅传递参考与传递值之间的区别是什么?http://en.wikipedia.org/wiki/Reference_(computer_science)

引用被广泛用于编程,尤其是有效地将大型或可变数据作为过程的参数传递,或者在各种用途之间共享这些数据.

编辑

clone 从下划线做一个浅拷贝.

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

要创建深层副本,最简单的方法可能是序列化和反序列化.如果a有参考周期,这将做奇怪的事情.

var b = JSON.parse(JSON.stringify(a));
Run Code Online (Sandbox Code Playgroud)


Fre*_*nöw 5

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

您将需要对对象进行"克隆"以更改它,因此您有两个对象而不是一个具有两个引用的对象.

  • 请注意,没有"对象b"和"对象a",只有一个对象(并且没有名称). (3认同)