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对于一个对象,这个值就是它的引用。