【发布时间】:2013-06-27 11:38:27
【问题描述】:
当我创建一个对象并将其推送到数组时,它是通过引用存储还是通过值存储?
我看到了以下情况:
var abc = { a: 10, b: 20};
var def = [];
def.push(abc);
abc.a = 100;
def[0].a; // outputs 100!
// if I do this
abc = { a: 10000, b: 20000 };
def[0].a; // still 100, no change this time
来自控制台的图像:
如果我使用= 符号将对象分配给abc,那么abc 在数组def 中指向的引用也应该改变,不是吗?我们在上面按值还是按引用称呼什么?
我理解它就像abc 是一个指向一个值的引用。只要我们不使用= 符号,它就会一直指向那个。请指导。
【问题讨论】:
-
改变一个对象的属性,你会看到。如果另一个对象也发生了变化,那么它们都引用了同一个对象。否则它们就是副本。