标题可能看起来很奇怪,但我真的不知道如何描述这种情况,因为我是 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};