Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript按引用传递还是按值传递?_Javascript - Fatal编程技术网

Javascript按引用传递还是按值传递?

Javascript按引用传递还是按值传递?,javascript,Javascript,我看到这个问题被问了很多次,但我有一个具体的例子要澄清 var a = {animal: 'cat'}; var b = a; a.animal = 'bear'; 在这里,我看到b.animal将给出一个输出“bear”。为什么呢?如何保留变量b的原始引用“cat”?您应该克隆对象,而不是复制引用(b=a) 这里有一个问题可以很好地解释这个问题: 您应该克隆对象,而不是复制引用(b=a) 这里有一个问题可以很好地解释这个问题: 复制“原语”,而不复制对象(即复制对它的引用)。 如果需要保

我看到这个问题被问了很多次,但我有一个具体的例子要澄清

var a = {animal: 'cat'};

var b = a;

a.animal = 'bear';

在这里,我看到b.animal将给出一个输出“bear”。为什么呢?如何保留变量b的原始引用“cat”?

您应该克隆对象,而不是复制引用(b=a)

这里有一个问题可以很好地解释这个问题:

您应该克隆对象,而不是复制引用(b=a)

这里有一个问题可以很好地解释这个问题:
复制“原语”,而不复制对象(即复制对它的引用)。
如果需要保护属性,请通过
定义属性
将其定义为可写:false

复制“原语”,而不复制对象(即复制对它的引用)。 如果需要保护该属性,请通过
defineProperty
Yes>将其定义为
writeable:false

您可能会感到困惑,因为在Javascript中,您通常不会在内置类型上使用“new”关键字,即使可以

您也可以这样声明“a”:

var a = new Object();
a.animal = "cat";
现在也许更清楚为什么“b”会随着“a”的变化而变化

如果“b”有自己的属性,那么。

您可能会感到困惑,因为在Javascript中,您通常不会在内置类型上使用“new”关键字,即使可以

您也可以这样声明“a”:

var a = new Object();
a.animal = "cat";
现在也许更清楚为什么“b”会随着“a”的变化而变化


如果“b”有自己的属性,则。

您已将引用从
a
复制到
b
,但它们都指向同一对象。如果要复制对象,则需要将该对象的每个属性复制到一个新对象。请看这个问题:它是按值复制的,但值是对象引用。因此,
b
a
的副本,但它们仍然引用同一个对象。Javascript总是按值传递…1000%sure@Pilot对于一个对象,该值就是它的引用。您已将引用从
a
复制到
b
,但它们都指向同一个对象。如果要复制对象,则需要将该对象的每个属性复制到一个新对象。请看这个问题:它是按值复制的,但值是对象引用。因此,
b
a
的副本,但它们仍然引用同一个对象。Javascript总是按值传递…1000%sure@Pilot对于一个对象,这个值就是它的引用。