Javascript';添加到数组中的对象是按值传递还是按引用传递?

Javascript';添加到数组中的对象是按值传递还是按引用传递?,javascript,pass-by-reference,pass-by-value,Javascript,Pass By Reference,Pass By Value,可能重复: 在这个文件中,我有一个对象this.objectA和this.allAs; this.objectA包含几个属性。 每次我得到一个新的this.objectA,我都会将它添加到数组this.allAs中。 当我得到一个新的时,我总是重新分配this.objectA 后来我检查了我的数组this.allAs,发现它正确地存储了不同的this.objectA。 为什么this.objectA被覆盖,而this.allAs中的对象没有被覆盖?(我希望所有存储的对象都指向相同的this.o

可能重复:

在这个文件中,我有一个对象this.objectA和this.allAs; this.objectA包含几个属性。 每次我得到一个新的this.objectA,我都会将它添加到数组this.allAs中。 当我得到一个新的时,我总是重新分配this.objectA

后来我检查了我的数组this.allAs,发现它正确地存储了不同的this.objectA。
为什么this.objectA被覆盖,而this.allAs中的对象没有被覆盖?(我希望所有存储的对象都指向相同的this.objectA,但事实并非如此)Javascript是对象的传递值???

您必须更具体地了解您正在做的事情。 JavaScript通过引用传递,但是如果您将本地副本保存在任何位置,并从返回语句中复制这些值,那么您就不再使用引用了——它们不再是指向完全相同对象的指针,这是必然的

下面是一些可以演示传递引用的内容:

Bob = { name : "Bob", age : 32 };
function giveBobTo (obj, bobject) { obj.bob = bobject; }

Billy = {};
Jim = {};

giveBobTo(Billy, Bob);
giveBobTo(Jim, Bob);

Jim.bob.cars_on_lawn = 8;
Billy.bob.cars_on_lawn;  // 8;
Bob.cars_on_lawn;        // 8;

console.log( "Billy-Bob equals Jim-Bob equals Bob:",
             Billy.bob === Jim.bob === Bob); // true

JS对象是通过引用传递的。“对象”在JavaScript中不是值。唯一的值是基本体和引用。JavaScript总是按值传递。JavaScript按值传递。有些值是原语,有些是对象引用,所以有些人说它通过值传递原语,通过引用传递对象,这或多或少是正确的。是的,差不多就是这样。当然,如果您递归地遍历某个节点路径,并且需要跟踪您在何处分配的内容,那么结果总是比这更复杂。对象嵌套越深,克隆对象的值就越困难。递归可以大大简化这一点,但堆栈只能做到这一点。原语对变量/对象/数组索引的赋值是按值进行的。但是,即使您要传入一个基本变量并在函数中就地编辑该变量,也将是通过引用(基本变量作为对象)。-我不明白
,但即使您要传入一个基本变量并在函数中就地编辑该变量,也将是通过引用(基本变量作为对象)
。原语仅临时转换为需要计算表达式的对象,更改不是永久性的(例如,在
x='string';x.split();
中,
x
的值强制转换为字符串对象,仅用于计算表达式,其值仍为原语字符串。