小编典典

变量赋值如何在JavaScript中起作用?

javascript

因此,前几天我在玩,目的是确切了解批量分配在JavaScript中的工作方式。

首先,我在控制台中尝试了以下示例:

a = b = {};
a.foo = 'bar';
console.log(b.foo);

结果是“栏”显示在警报中。这很公平,a并且b实际上只是同一对象的别名。然后我想,如何使这个例子更简单。

a = b = 'foo';
a = 'bar';
console.log(b);

那几乎是同一回事,不是吗?好吧,这次返回的结果与我从第一个示例的行为所期望的foobar一样。

为什么会这样?

注意: 可以使用以下代码进一步简化此示例:

a = {};

b = a;

a.foo = 'bar';

console.log(b.foo);



a = 'foo';

b = a;

a = 'bar';

console.log(b);

(我怀疑JavaScript对哈希和字符串之类的原语的处理方式与哈希不同。哈希返回一个指针,而“核心”原语返回其自身的副本)


阅读 282

收藏
2020-04-25

共1个答案

小编典典

在第一个示例中,您将设置现有对象的属性。在第二个示例中,您正在分配一个全新的对象。

a = b = {};

a并且b现在是指向同一对象的指针。因此,当您这样做时:

a.foo = 'bar';

b.foo从此它也设置ab指向同一对象。

然而!

如果您改为这样做:

a = 'bar';

您是说现在a指向另一个对象。这a对之前指出的没有影响。

在JavaScript中,分配变量和分配属性是2种不同的操作。最好将变量视为指向对象的指针,当您直接将变量分配给变量时,您无需修改​​任何对象,而只是将变量指向另一个对象。

但是分配一个属性(如a.foo)将修改a指向的对象。当然,这还修改了所有其他指向该对象的引用,这仅仅是因为它们都指向同一对象。

2020-04-25