将一个变量设置为另一个变量是否会导致使用Javascript在内存中复制数据?

将一个变量设置为另一个变量是否会导致使用Javascript在内存中复制数据?,javascript,Javascript,使用Javascript,如果我有: var a = {'x':1, 'y':2}; var b = a; console.log(a); console.log(b); …然后a和b将打印相同的内容。我的理解是a和b都指向内存中的相同数据。但是,如果我这样做: a = {}; console.log(b); …然后b仍保留原始对象,即使a现在是空对象。如果我像上面那样设置变量,例如var b=a,我希望确保内存中不会有对象的重复副本。在某些语言中,给a一个新值会对b产生连锁反应,因为它们

使用Javascript,如果我有:

var a = {'x':1, 'y':2};
var b = a;

console.log(a);
console.log(b);
…然后a和b将打印相同的内容。我的理解是a和b都指向内存中的相同数据。但是,如果我这样做:

a = {};
console.log(b);
…然后
b
仍保留原始对象,即使
a
现在是空对象。如果我像上面那样设置变量,例如
var b=a
,我希望确保内存中不会有对象的重复副本。在某些语言中,给
a
一个新值会对
b
产生连锁反应,因为它们都指向内存中相同的数据


设置
a={}
并不同时将
b
设置为空对象,这一事实让我感到困惑。在我设置
a={}
之前,它们实际上是指向相同的数据吗?

这只是解释了它是如何工作的。您的案例是第二个案例,通过值传递:)

这只是解释了它是如何工作的。您的案例是第二个案例,通过值传递:)

下面的3个图像将告诉您这里发生了什么


下面的3张图片将告诉您这里发生了什么


在您的情况下,不仅当您使用原语值,如(字符串、数字、布尔值…)时,当您设置b=a时,两个变量都位于单独的内存地址中。当你们使用对象时,你们使用的是引用,这意味着两个变量指向内存中的同一个点


不要害怕使用Chrome开发工具来试验这些类型的东西…这是学习JavaScript的最佳实践…

在您的情况下,不只是当您使用基本值,如(字符串、数字、布尔值…)时,然后当您设置b=a时,两个变量都位于不同的内存地址中。当你们使用对象时,你们使用的是引用,这意味着两个变量指向内存中的同一个点

不要害怕使用Chrome开发工具来试验这些类型的东西…这是学习JavaScript的最佳实践

它是传递值,但对于对象,变量的值是 参考资料

(资料来源:蒂姆·古德曼)

这个问题已经回答了很多次,你可以找到一个

&也

它是传递值,但对于对象,变量的值是 参考资料

(资料来源:蒂姆·古德曼)

这个问题已经回答了很多次,你可以找到一个

&也


呃,如果a==b,那么我们谈论的是复制的数据,或者我误解了你吗?老实说,我想你已经回答了你自己的问题……我想是的,但我想确定一下,我希望有人了解Javascript引擎,或者有比我能证实的更多的语言经验。正如我所说,设置
a={}
并没有将
b
设置为相同的事实让我感到困惑。如果您正在引用数组、函数、字符串文字或对象,那么它不会引用,尽管它仍然会占用内存作为指针,而事实上,第一个变量也是这样做的。。。。。所以它确实占用了内存中两倍的空间,但是空间不是基于对象的大小,它总是一个指针。。。。如果我们讨论的是诸如不通过引用传递的数字之类的东西,那么它需要更多的内存。呃,如果a==b,那么我们讨论的是复制的数据,或者我误解了你吗?老实说,我想你已经回答了你自己的问题……我想是的,但我只是想确定一下,我希望有人能够理解Javascript引擎,或者拥有比我所能证实的更多的语言经验。正如我所说,设置
a={}
并没有将
b
设置为相同的事实让我感到困惑。如果您正在引用数组、函数、字符串文字或对象,那么它不会引用,尽管它仍然会占用内存作为指针,而事实上,第一个变量也是这样做的。。。。。所以它确实占用了内存中两倍的空间,但是空间不是基于对象的大小,它总是一个指针。。。。如果我们谈论的是诸如不通过引用传递的数字之类的东西,那么它需要更多的内存。虽然在答案中链接到外部引用很好,但答案本身应该包含链接中所有相关或引用的信息,以便答案是自含的。它是通过引用传递的,而不是值。我现在处于一种轻微的震惊状态,尽量不显得粗鲁。虽然链接到外部引用在回答中很好,但答案本身应该包含链接中所有相关或引用的信息,以便答案是独立的。它是通过引用传递的,而不是价值。我现在处于一种轻微的震惊状态,尽量不显得粗鲁。是的,这就是我所希望的,谢谢@是的,我希望如此,谢谢@是的,我做了:)
var a = {"test": 1};
var b = a;

console.log(a);
console.log(b);

a.test = 2;

console.log(a);
console.log(b);

a = {"new_test": 3};

console.log(a);
console.log(b);