Om *_*kar 3 javascript coding-style
当我创建一个对象并将其推送到一个数组时,它是通过引用或值存储的吗?
我看到以下情况发生了:
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
Run Code Online (Sandbox Code Playgroud)
控制台中的图像:

如果我使用=符号来指定一个对象abc,abc那么数组中指向的引用def也应该改变,不是吗?我们在上面,通过价值或参考来称呼什么?
我理解它就像是abc指向一个值的引用.只要我们不使用=标志,它就会一直指向它.请指导.
我们来看看发生了什么:
var abc = { a: 10, b: 20};
Run Code Online (Sandbox Code Playgroud)
在内存中创建一个新对象并将其分配给变量abc.
var def = [];
Run Code Online (Sandbox Code Playgroud)
在内存中创建一个新数组并将其分配给变量def.
def.push(abc);
Run Code Online (Sandbox Code Playgroud)
在数组内部,现在有一个指向以前创建的对象的指针.
abc.a = 100;
def[0].a; // outputs 100!
Run Code Online (Sandbox Code Playgroud)
显然是对的.我们正在修改对象,该对象也由数组引用.
abc = { a: 10000, b: 20000 };
Run Code Online (Sandbox Code Playgroud)
再次创建一个新对象,并存储对它的引用abc.现在我们在内存中有两个对象(和一个数组).
def[0].a; // still 100, no change this time
Run Code Online (Sandbox Code Playgroud)
当然,这仍然是100.数组指针仍然引用第一个创建的对象而不是第二个.