0

标题可能看起来很奇怪,但我真的不知道如何描述这种情况,因为我是 JavaScript 的初学者。

这是代码:

a={};
var b=a;
b['a']='x';
console.log(a);

结果将是:

Object { a="x"}

它不应该是一个空白对象,因为我只将“x”设置为变量 b 吗?

4

2 回答 2

7

a包含对对象的引用,如下所示:

+-----+ +-----------+
| 一个 |------->| (对象) |
+-----+ +-----------+

所以当你这样做时:

var b = a;

现在你有两个变量引用同一个对象。

+-----+
| 一个 |---+
+-----+ | +---------------+
          +--->| (对象) |
+-----+ | +---------------+
| b |---+
+-----+

所以很自然,您对该对象所做的任何更改(在您的情况下向其添加属性)都可以通过任一引用看到。

于 2013-09-12T16:52:16.717 回答
0

b是一个参考,a所以这是一种正常的行为。为避免这种情况,您需要进行克隆。例如,使用 jQuery 框架,您可以简单地执行以下操作:var b = $.extend(true, {}, a};

于 2013-09-12T16:53:06.907 回答