猿问

变量赋值如何在JavaScript中工作?

变量赋值如何在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将字符串和整数等原语与哈希处理不同。哈希返回指针,而“核心”原语返回自己的副本)



吃鸡游戏
浏览 370回答 3
3回答

开满天机

在第一个示例中,您要设置现有对象的属性。在第二个示例中,您将分配一个全新的对象。a = b = {};a而b现在用于指向同一个对象。所以当你这样做时:a.foo = 'bar';它规定b.foo,以及因为a和b指向同一个对象。然而!如果你这样做:a = 'bar';你说现在a指向另一个对象。这a对前面指出的内容没有影响。在JavaScript中,分配变量和分配属性是两种不同的操作。最好将变量视为对象的指针,当您直接分配给变量时,您不会修改任何对象,只是将变量重新分配给不同的对象。但是,分配属性,a.foo将修改a指向的对象。当然,这也会修改指向此对象的所有其他引用,因为它们都指向同一个对象。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答