所以前几天我正在玩,只是为了看看在 JavaScript 中批量赋值是如何工作的。
首先我在控制台中尝试了这个例子:
a = b = {};
a.foo = 'bar';
console.log(b.foo);
结果是“bar”显示在警报中。这是不够公平,a
而且b
实际上只是别名同一个对象。然后我想,我怎样才能让这个例子更简单。
a = b = 'foo';
a = 'bar';
console.log(b);
这几乎是一样的,不是吗?好吧,这一次,它返回的结果foo
不像bar
我对第一个示例的行为所期望的那样。
为什么会发生这种情况?
注意这个例子可以用以下代码进一步简化:
a = {};
b = a;
a.foo = 'bar';
console.log(b.foo);
a = 'foo';
b = a;
a = 'bar';
console.log(b);
(我怀疑 JavaScript 将诸如字符串和整数之类的原语与散列区别对待。散列返回一个指针,而“核心”原语返回其自身的副本)