我在玩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/

10-12 15:40