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)
表达式{ 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)
您已创建对同一对象的引用.执行此操作时,变量b的任何更改都将影响存储在变量a中的对象.
您将需要对对象进行"克隆"以更改它,因此您有两个对象而不是一个具有两个引用的对象.