标题可能看起来很奇怪,但我真的不知道如何描述这种情况,因为我是 JavaScript 的初学者。
这是代码:
a={};
var b=a;
b['a']='x';
console.log(a);
结果将是:
Object { a="x"}
它不应该是一个空白对象,因为我只将“x”设置为变量 b 吗?
标题可能看起来很奇怪,但我真的不知道如何描述这种情况,因为我是 JavaScript 的初学者。
这是代码:
a={};
var b=a;
b['a']='x';
console.log(a);
结果将是:
Object { a="x"}
它不应该是一个空白对象,因为我只将“x”设置为变量 b 吗?
a包含对对象的引用,如下所示:
+-----+ +-----------+ | 一个 |------->| (对象) | +-----+ +-----------+
所以当你这样做时:
var b = a;
现在你有两个变量引用同一个对象。
+-----+
| 一个 |---+
+-----+ | +---------------+
+--->| (对象) |
+-----+ | +---------------+
| b |---+
+-----+
所以很自然,您对该对象所做的任何更改(在您的情况下向其添加属性)都可以通过任一引用看到。
b是一个参考,a所以这是一种正常的行为。为避免这种情况,您需要进行克隆。例如,使用 jQuery 框架,您可以简单地执行以下操作:var b = $.extend(true, {}, a};