变量赋值如何在JavaScript中工作?所以我前几天正在玩,只是为了确切了解JavaScript中的大规模分配是如何工作的。首先我在控制台中尝试了这个例子:a = b = {};a.foo = 'bar';console.log(b.foo);结果是“警报”显示在警报中。这是公平的,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将字符串和整数等原语与哈希处理不同。哈希返回指针,而“核心”原语返回自己的副本)
3 回答

开满天机
TA贡献1786条经验 获得超13个赞
在第一个示例中,您要设置现有对象的属性。在第二个示例中,您将分配一个全新的对象。
a = b = {};
a
而b
现在用于指向同一个对象。所以当你这样做时:
a.foo = 'bar';
它规定b.foo
,以及因为a
和b
指向同一个对象。
然而!
如果你这样做:
a = 'bar';
你说现在a
指向另一个对象。这a
对前面指出的内容没有影响。
在JavaScript中,分配变量和分配属性是两种不同的操作。最好将变量视为对象的指针,当您直接分配给变量时,您不会修改任何对象,只是将变量重新分配给不同的对象。
但是,分配属性,a.foo
将修改a
指向的对象。当然,这也会修改指向此对象的所有其他引用,因为它们都指向同一个对象。
添加回答
举报
0/150
提交
取消