考虑这个例子:
这是我的预期行为,一旦我们更改了对象值,originalObj
也会发生变异。
现在考虑这个例子(嵌套对象):
如您所见,该对象尚未更新。
即使反过来也没有用(更新原始对象并不会改变引用):
为什么会发生这种情况,我该如何规避呢?
答案 0 :(得分:2)
在JavaScript中,事物是按值传递的。在您的初始代码中:
var ref = originalObj;
originalObj
的值已复制到ref
。该值是对象的引用,因此两个变量都具有该引用的独立副本,但它们都引用相同的基础对象。对象的变化反映在两个变量中。
在此:
var fooRef = originalObj.foo;
同样,正在复制originalObj.foo
的值,但这次该值只是一个数字1
。此时,变量和属性具有该值的独立副本,但它只是一个数字,而不是对象的引用。其中任何一个的变化都没有反映在另一个中。
我该怎样绕过它?
通过使用第一个代码块 - 您需要对包含要更新的属性的对象的引用 - 您无法通过保留对它的引用/指针来直接更新变量或属性。
答案 1 :(得分:0)
没有对原始类型的引用,正在复制该值。 如果需要引用,请将此值包装在对象中并指向对象