我在玩chrome控制台时,发现一些我听不懂的东西。我知道在JS中变量是按值复制的,而对象是按引用复制的。下面的代码按预期工作正常,输出2,并证明JS对象可作为引用工作:
var objA = {a: 1};
var objB = objA;
objA.a = 2;
objB.a; // 2
但是,此代码无法正常工作。我期望objB.a输出
2
,但是却提供了1
。为什么?var objA = {a: 1};
var objB = objA;
objA = {a: 2}; //Assigned whole object here instead property.
objB.a; //1 - Shouldn't this be 2 ??
最佳答案
我宁愿将带有对象的变量视为指向对象的指针(例如C指针),而不是引用。
在第三行中,您刚刚替换了objA
,使其“指向”另一个对象。不管objB
是“指向”什么,它都不会改变。
在第3行,objA
现在指向{a:2}
,而objB
仍指向在第2行将objA
分配给objB
时指向的内容,即{a:1}
。
line 1: objA -> {a:1}
line 2: objA -> {a:1} <- objB
line 3: objA -> {a:2}, objB -> {a:1}
关于javascript - JS对象按值复制与按引用复制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19448646/