gpt4 book ai didi

javascript - 变量赋值在 JavaScript 中是如何工作的?

转载 作者:IT王子 更新时间:2023-10-29 02:43:31 26 4
gpt4 key购买 nike

所以前几天我一直在玩,只是想看看 JavaScript 中的批量赋值到底是如何工作的。

首先我在控制台中尝试了这个例子:

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

结果是在警报中显示“bar”。这很公平,ab 实际上只是同一个对象的别名。然后我想,我怎样才能让这个例子更简单。

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 对待字符串和整数等基元的方式与哈希不同。哈希返回一个指针,而“核心”基元返回其自身的副本)

最佳答案

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

a = b = {};

ab 现在是指向同一个对象的指针。所以当你这样做时:

a.foo = 'bar';

它也设置了 b.foo,因为 ab 指向同一个对象。

但是!

如果您改为这样做:

a = 'bar';

你是说 a 现在指向一个不同的对象。这对 a 之前指向的内容没有影响。

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

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

关于javascript - 变量赋值在 JavaScript 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/509579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com