【发布时间】:2018-11-23 05:11:42
【问题描述】:
我有几个关于在 JavaScript 中设置一个变量等于另一个变量的问题。
假设我们创建一个对象a 并设置b = a。
var a = {
fname: "Jon",
lname: "Smith",
age: 50
}
var b = a;
我了解,如果我们更改 a 的属性之一,b 也会被更改,因为当我们设置 b = a 时,我们不会克隆 a 的数据,而是创建对 @ 的引用987654328@的数据。比如我们设置a.fname = "Sarah",那么b.fname的新值就是"Sarah"。
如果我们尝试通过设置a = {} 来“清除”a,对象b 将保持不变。我不明白为什么以这种方式操作对象会产生与第一个示例不同的结果。
我还有一个关于以下场景的问题。
var x = 10;
var z = x;
如果我们随后设置x = 20,z 的值将保持不变。根据我在第一个问题中描述的行为,人们会认为z 的新值将反映x 的新值。有人可以解释一下我在这里缺少什么吗?
谢谢!
【问题讨论】:
-
x = 10, 10 是数字,像字符串一样原始,原始没有引用,a = {}, {} 是一个新对象,有一个新引用,所以你改变了保存在a 变量,而 b 仍然引用旧对象
-
If we try to "clear" a though by setting a = {}这不是清除它,它只是告诉 a 指向另一个new对象..
标签: javascript variables javascript-objects